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