Получение групп блоков переписи из шейп-файла на основе длинных входных данных - Java

Я новичок в shapefile обработка. Пожалуйста, сообщите мне, как выполнить мой запрос ниже.

Я использую этот шейп- файл tl_2018_us_aiannh.shp от census.gov: TIGER-LINE. Я должен получить объекты группы блоков переписи, такие как блок, тракт, подразделение округа и данные округа, из шейп-файла на основе широты и долготы, предоставленной пользователем.

Мое требование состоит в том, чтобы достичь этого путем shapefile в одиночку, а не через любые API.

Может кто-нибудь помочь, на каких рамках я могу этого добиться?

Что я пробовал / использовал до сих пор:

  • я использовал GeoTools читать shapefile, Могу ли я продолжать использовать то же самое? Достигнет ли мое требование этого инструмента?
  • Я просмотрел документацию census.gov, в которой говорится:

Бюро переписей присваивает код, и они появляются в таких полях, как "TRACTCE", где "CE" обозначает перепись. Наконец, представленные государством коды заканчиваются на "ST", такие как "SLDLST", а коды местных образовательных агентств заканчиваются на "LEA", как и "ELSDLEA".

Что я попробовал в своем коде:

File file = new File("D:\\tl_2018_us_aiannh.shp");

        try {
            Map<String, String> connect = new HashMap();
            connect.put("url", file.toURI().toString());

            DataStore dataStore = DataStoreFinder.getDataStore(connect);
            String[] typeNames = dataStore.getTypeNames();
            String typeName = typeNames[0];

            System.out.println("Reading content " + typeName);

            SimpleFeatureSource featureSource = dataStore
                    .getFeatureSource(typeName);
            SimpleFeatureCollection collection = featureSource.getFeatures();
            SimpleFeatureIterator iterator = collection.features();

            try {
                while (iterator.hasNext()) {
                    SimpleFeature feature = iterator.next();
                    GeometryAttribute sourceGeometry = feature
                            .getDefaultGeometryProperty();
                    String name = (String) (feature).getAttribute("TRACTCE");
                    Property property = feature.getProperty("TRACTCE");
                    System.out.println(property);
                }
            } finally {
                iterator.close();
            }

        } catch (Throwable e) {
            e.getMessage();
        }

Но я получаю ноль в качестве значения.

Любая помощь будет очень полезна.

1 ответ

Решение

Я нашел решение для этого. Надеюсь, это будет полезно для кого-то нуждающегося.

SimpleFeature это тип, имеющий атрибуты файлов форм, которые вы можете проверить при попытке отладки или печати строки во время выполнения. Вы можете использовать SimpleFeature чтобы получить собственность. Атрибуты могут быть достигнуты путем:

  try {
     while (iterator.hasNext()) {
         SimpleFeature feature = iterator.next();
         Property intptlat = feature.getProperty("TRACTCE");
     }
 }

Убедитесь, что вы выбираете группы блоков в качестве типа слоя для загрузки в Tiger-Line или какой сайт касается, где вы загружаете файл формы.

Другие вопросы по тегам