根据latlong输入从shapefile获取普查块组-Java

时间:2019-01-09 11:10:59

标签: java coordinates shapefile coordinate-systems census

我不熟悉shapefile处理。请指导我如何实现下面的查询。

我正在使用 census.gov:TIGER-LINE 中的这个shapefile tl_2018_us_aiannh.shp 。我要获取人口普查区组实体,例如 Block Tract County细分细分 County < / em>根据用户提供的纬度和经度从shapefile中获取详细信息。

我的要求是仅通过shapefile而不是通过任何API来实现这一目标。

有人可以帮助我实现这一目标吗?

到目前为止我一直在尝试/使用的内容

  • 我已使用GeoTools来阅读shapefile。我可以继续使用吗?我的要求可以通过此工具实现吗?
  • 我已经阅读了来自 census.gov 的文档,其中指出:
  

人口普查局分配了一个代码,这些代码出现在诸如   “ TRACTCE”,其中“ CE”代表人口普查。最后,国家提交   代码以“ ST”结尾,例如“ SLDLST”,以及当地的教育机构代码   和“ ELSDLEA”一样,以“ LEA”结尾。

我在代码中尝试过的方式

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 :(得分:0)

我已经找到解决方案。希望这对有需要的人有帮助。

SimpleFeature是具有形状文件属性的类型,当您尝试在运行时调试或打印行时可以检查这些形状文件。您可以使用SimpleFeature来获取属性。这些属性可以通过以下方式实现:

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

请确保选择块组作为要在Tiger-Line中下载的图层类型,或者要从哪个相关站点下载形状文件。