Hi
              Emilio,
           
          I’m
              trying to create hbase importer which can import Polygons
              stored as WKT in CSV files.
          Everything
              is building fine but when I try to import file I can see
              Exception like my geometry was taken as Point :
           
          Exception
                in thread “main” java.lang.ClassCastException:
                com.vividsolutions.jts.geom.Polygon cannot be cast to
                com.vividsolutions.jts.geom.Point
              
           
          
           
          I
              can’t find solution for this problem.
           
          Application
              code:
           
          /**
          * Copyright 2016 Commonwealth Computer
                Research, Inc.
          *
          * Licensed under the Apache License,
                Version 2.0 (the License);
          * you may not use this file except in
                compliance with the License.
          * You may obtain a copy of the License at
          *
          * 
                  http://www.apache.org/licenses/LICENSE-2.0
          *
          * Unless required by applicable law or
                agreed to in writing, software
          * distributed under the License is
                distributed on an AS IS BASIS,
          * WITHOUT WARRANTIES OR CONDITIONS OF ANY
                KIND, either express or implied.
          * See the License for the specific language
                governing permissions and
          * limitations under the License.
          */
                         
              
          //                           
              
           
          package com.example.geomesa.hbase;
           
          import com.beust.jcommander.internal.Lists;
          import com.google.common.base.Joiner;
          import
                com.vividsolutions.jts.geom.Geometry;
          import com.vividsolutions.jts.geom.Polygon;
          import com.vividsolutions.jts.geom.Point;
          import
                com.vividsolutions.jts.geom.GeometryFactory;
          import com.vividsolutions.jts.io.WKTReader;
          import org.apache.commons.cli.*;
          import org.geotools.data.*;
          import org.geotools.factory.Hints;
          import
                org.geotools.feature.DefaultFeatureCollection;
          import
                org.geotools.feature.FeatureCollection;
          import
                org.geotools.feature.FeatureIterator;
          import
                org.geotools.feature.SchemaException;
          import
                org.geotools.feature.simple.SimpleFeatureBuilder;
          import org.geotools.filter.text.cql2.CQL;
          import
                org.geotools.filter.text.cql2.CQLException;
          import
                org.geotools.geometry.jts.JTSFactoryFinder;
          import org.joda.time.DateTime;
          import org.joda.time.DateTimeZone;
          import
                org.locationtech.geomesa.utils.text.WKTUtils$;
          import
                org.geotools.swing.data.JFileDataStoreChooser;
          import org.opengis.feature.Feature;
          import
                org.opengis.feature.simple.SimpleFeature;
          import
                org.opengis.feature.simple.SimpleFeatureType;
          import org.opengis.filter.Filter;
           
          import java.io.IOException;
          import java.io.Serializable;
          import java.io.File;
          import java.io.BufferedReader;
          import java.io.BufferedReader.*;
          import java.io.FileReader;
          import java.io.FileReader.*;
           
          import java.util.HashMap;
          import java.util.List;
          import java.util.Map;
          import java.util.Random;
           
          public class HBaseImporter {
                          static String TABLE_NAME =
                "bigtable.table.name".replace(".", "_");
           
                          // sub-set of parameters
                that are used to create the HBase DataStore
                          static String[]
                HBASE_CONNECTION_PARAMS = new String[]{
                          TABLE_NAME
                          };
           
                          /**
                          * Creates a common set of
                command-line options for the parser.  Each option
                          * is described separately.
                          */
                          static Options
                getCommonRequiredOptions() {
                          Options options = new
                Options();
           
                          Option tableNameOpt =
                OptionBuilder.withArgName(TABLE_NAME)
                          .hasArg()
                          .isRequired()
                          .withDescription("table
                name")
                          .create(TABLE_NAME);
                         
                options.addOption(tableNameOpt);
           
                          return options;
                          }
           
                          static Map<String,
                Serializable> getHBaseDataStoreConf(CommandLine cmd)
                {
                          Map<String ,
                Serializable> dsConf = new HashMap<>();
                          for (String param :
                HBASE_CONNECTION_PARAMS) {
                         
                dsConf.put(param.replace("_", "."),
                cmd.getOptionValue(param));
                          }
                          System.out.println(
                "DataStore Config: " + dsConf);
                          return dsConf;
                          }
           
                          static SimpleFeatureType
                createSimpleFeatureType(String simpleFeatureTypeName)
                          throws SchemaException {
           
                          // list the attributes that
                constitute the feature type
                          List<String>
                attributes = Lists.newArrayList(
                          "ID:Integer",
                          "*WKT:Polygon:srid=4326",
                 // the "*" denotes the default geometry (used for
                indexing)                
              
                          //"What:java.lang.Long", //
                some types require full qualification (see DataUtilities
                docs)
                          "date:Date",
                                        // a date-time field is
                optional, but can be indexed
                          "osm_id:String",
                                
              
                          "name:String",
                                   
              
                          "type:String"        
              
                          );
           
                          // create the bare
                simple-feature type
                          String
                simpleFeatureTypeSchema =
                Joiner.on(",").join(attributes);
                          SimpleFeatureType
                simpleFeatureType =
                         
                DataUtilities.createType(simpleFeatureTypeName,
                simpleFeatureTypeSchema);
                          System.out.println(
                "SimpleFeatureType: " + simpleFeatureType);
                          return simpleFeatureType;
                          }
             
          static FeatureCollection
                createNewFeatures(SimpleFeatureType simpleFeatureType,
                File file) throws IOException {    
             /*
                          * We create a
                FeatureCollection into which we will put each Feature
                created from a record
                          * in the input csv data
                file
                          */
             
                          DefaultFeatureCollection
                featureCollection = new DefaultFeatureCollection();    
             
                          /*
                          * GeometryFactory will be
                used to create the geometry attribute of each feature (a
                Point
                          * object for the location)
                          */
           
                          GeometryFactory
                geometryFactory =
                JTSFactoryFinder.getGeometryFactory(null);
           
                          SimpleFeatureBuilder
                featureBuilder = new
                SimpleFeatureBuilder(simpleFeatureType);
                          WKTReader georeader = new
                WKTReader( geometryFactory );
             
                         
              
                          java.io.FileReader infile =
                new java.io.FileReader(file);
                          java.io.BufferedReader
                reader = new java.io.BufferedReader(infile);
                          try {
                          /* First line of the data
                file is the header */
                          String line =
                reader.readLine();
                          System.out.println("Header:
                " + line);
                                        
                System.out.println( "Feature Collection creation
                start");
                                         int lines =
                0;
                          for (line =
                reader.readLine(); line != null; line =
                reader.readLine()) {
                          if (line.trim().length()
                > 0) { // skip blank lines
                          String tokens[] =
                line.split("\\;");
           
                          int ID =
                Integer.parseInt(tokens[0].trim());    
           
                                                                        
                //Geometry WKT = WKTUtils$.MODULE$.read(tokens[1]);
                          Polygon WKT = (Polygon)
                georeader.read(tokens[1]);
                          String osm_id =
                tokens[2].trim();
                          String name =
                tokens[3].trim();
                          String type =
                tokens[4].trim();
                                                                        
              
                                                                        
              
                                                                        
                featureBuilder.add(ID);
                          featureBuilder.add(WKT);
                                                                               
              
                          featureBuilder.add(osm_id);
                          featureBuilder.add(name);
                          featureBuilder.add(type);
                          SimpleFeature feature =
                featureBuilder.buildFeature(null);
                         
                featureCollection.add(feature);
                         
              
                                                        
                /*    System.out.println( ".  " +
                         
                feature.getProperty("ID").getValue() + "|" +
                         
                feature.getProperty("WKT").getValue() + "|" +
                         
                feature.getProperty("osm_id").getValue() + "|" +
                         
                feature.getProperty("name").getValue() + "|" +
                         
                feature.getProperty("type").getValue());*/
                                                                        
              
                                                                        
              
                                                                        
                lines++;
                                                                        
              
                          }
                          }
                                        
                System.out.println( "Feature Count: " + lines);
                                           
              
                          } finally {
           
                          reader.close();
                                        
                System.out.println( "Feature Collection creation
                finished");
                                         return
                featureCollection;
                                        
              
                          }
          }
             
                          static void
                insertFeatures(String simpleFeatureTypeName,
                                         DataStore
                dataStore,
                                        
                FeatureCollection featureCollection)
                          throws IOException {
           
                          FeatureStore featureStore =
(FeatureStore)dataStore.getFeatureSource(simpleFeatureTypeName);
                         
                System.out.println("getFeatureSource: " + featureStore);
                   
                         
                System.out.println("featureCollection: " +
                featureCollection);
                         
                featureStore.addFeatures(featureCollection);
                          System.out.println("Insert
                finished");
                         
              }
           
                         
              public
                static void main(String[] args) throws Exception {
                          // find out where -- in
                HBase -- the user wants to store data
                          CommandLineParser parser =
                new BasicParser();
                          Options options =
                getCommonRequiredOptions();
                          CommandLine cmd =
                parser.parse( options, args);
           
                          // verify that we can see
                this HBase destination in a GeoTools manner
                          Map<String,
                Serializable> dsConf = getHBaseDataStoreConf(cmd);
                          DataStore dataStore =
                DataStoreFinder.getDataStore(dsConf);
                          assert dataStore != null;
           
                          // establish specifics
                concerning the SimpleFeatureType to store
                          String
                simpleFeatureTypeName = "ImporterDev2";
                          SimpleFeatureType
                simpleFeatureType =
                createSimpleFeatureType(simpleFeatureTypeName);
           
                          // write Feature-specific
                metadata to the destination table in HBase
                          // (first creating the
                table if it does not already exist); you only need
                          // to create the
                FeatureType schema the *first* time you write any
                Features
                          // of this type to the
                table
                         
                System.out.println("Creating feature-type (schema):  " +
                simpleFeatureTypeName);
                         
                dataStore.createSchema(simpleFeatureType);
           
                         
              
                          File file =
                JFileDataStoreChooser.showOpenFile("csv", null);
                          if (file == null) {
                                        
                //System.out.println("Chosen CSV File:  " + file);
                 //.getSelectedFile().getName()
                          return;
                          }
           
                          System.out.println("Chosen
                CSV File:  " + file);
                         
              
                         
              
                          // create new features
                locally, and add them to this table
                         
                System.out.println("Creating new features");
                          FeatureCollection
                featureCollection = createNewFeatures(simpleFeatureType,
                file);
                         
                System.out.println("Inserting new features");
                         
              insertFeatures(simpleFeatureTypeName,
                dataStore, featureCollection);
           
                         
                }
          }
           
           
          
           
          Hi Marcin,
            
            The command line tools currently support accumulo and (to a
            lesser degree) kafka. For ingesting data into hbase, you
            have to use the geotools API for creating simple features.
            We have several tutorials on how to do this using accumulo -
            those would be a good place to start. You should be able to
            adapt them to hbase by replacing the accumulo data store
            with an hbase data store. Because they are both geotools
            DataStore implementations, almost all of the code would
            remain the same.
            
            
            Single process ingest/query:
            
                http://www.geomesa.org/documentation/tutorials/geomesa-quickstart-accumulo.html
            
            Map/reduce ingest:
            
                http://www.geomesa.org/documentation/tutorials/geomesa-examples-gdelt.html
            
            Streaming ingest using storm:
            
                http://www.geomesa.org/documentation/tutorials/geomesa-quickstart-storm.html
            
            
            
            The hbase documentation describes how to get an hbase data
            store:
            
                http://www.geomesa.org/documentation/user/hbase_datastore.html
            
            Thanks,
            
            Emilio
          
            On 07/04/2016 04:34 AM, Marjasiewicz,
              Marcin wrote:
           
          
            Line
                Tools and HBase
             
            Good morning,
             
            I would like to ask
                a question about using Command Line Tools with HBase. Is
                it supported or it is only tool for Accumulo?
              
            If not what is
                proper format to storage geometry in HBase? For example
                if I will import CSV with geometry as WKT will it work
                with Geomesa Hbase Geoserver plugin?  
            I have already
                configured Geoserver plugin to work with my HBase. Now I
                am looking for some solution to load geospatial data
                into it.
             
            My sample data row
                in HBase table looks that:
            
             
            Best Regards
            _______________________________
            Marcin Marjasiewicz
             
            
                
                
                
              
            _______________________________________________
            geomesa-users mailing list
            geomesa-users@xxxxxxxxxxxxxxxx
            To change your delivery options, retrieve your password, or unsubscribe from this list, visit
            https://www.locationtech.org/mailman/listinfo/geomesa-users
          
           
          
              
              
              
          _______________________________________________
          geomesa-users mailing list
          geomesa-users@xxxxxxxxxxxxxxxx
          To change your delivery options, retrieve your password, or unsubscribe from this list, visit
          https://www.locationtech.org/mailman/listinfo/geomesa-users