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

Я новичок в 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 Ответ

0 голосов
/ 16 февраля 2019

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...