1

我需要来自 GIS 数据的纬度/经度

我有来自 http://www.mngeo.state.mn.us/chouse/land_own_property.html的数据文件

以 .dbf、.prj、.sbn、.sbx、.shp 和 .shx 格式给出

在 .dbf 我看到

PIN, Shape_area, Shape_len
PARC_CODE   Parcel Polygon to Parcel Point numeric  2  
            and PIN Relationship Code 

并在 .prj

PROJCS["NAD_1983_UTM_Zone_15N",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-93.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]

我也知道每个县的多边形点

polygons points 
Anoka 129139 129138 
Carver 38134 38133 
Dakota 135925 150294 
Hennepin 422976 446623 
Ramsey 149169 168233 
Scott 55191 55191 
Washington 98915 103915 

我知道边界坐标

-94.012 
-92.732 
45.415 
44.471

似乎有大量的 GIS 软件应用程序 http://en.wikipedia.org/wiki/List_of_geographic_information_systems_software

但我需要做什么?

我想要每个房子的纬度,经度

有图书馆可以为我做这件事吗?我需要什么数据?

4

3 回答 3

1

我认为您需要安装一个 GIS 软件。您可以尝试开源Qgis

因为,首先您的数据不在长/纬度(地理)坐标中。shapefile 的 .prj 部分(是的,所有同名的 .dbf、.prj、.sbn、.sbx、.shp 和 .shx 文件都是 GIS 的一个 shapefile)表示数据位于投影坐标系中NAD 1983 UTM 区 15N。因此,您需要将数据转换为地理系统。这可以在 GIS 中轻松完成,或者通过proj.4库以编程方式完成。(在 Qgis 中将 shapefile 添加到项目中,然后在目录中选择它,鼠标右键并选择“另存为...”。它会要求您提供目标坐标系。)注意,您需要决定您希望使用哪个地理坐标,因为您的数据位于北美基准 (NAD 1983),但现在全球最常见的是 WGS 1984。

其次,在 GIS 中,您将看到您的数据,它们是真正的点还是多边形。(如果你的房子是多边形,你需要在 Qgis 菜单 Vector - Geometry Tools - Polygon Centroids 中获取它们的质心)。

最后,当您真正将房屋作为地理坐标中的点时,您可以获取它们的坐标,例如使用这些问题的建议Get list of coordinates for points in a layerHow do I calculate the latitude and longitude of points using QGIS

此外,还有一个很好的库来处理 GIS 矢量数据,OGR,它可以被许多编程语言使用。

于 2012-11-29T04:57:58.237 回答
1

上面的文件扩展名显示,这些文件是 ESRI 形状文件格式。在 Java 中,您可以使用 GeoTools 库来阅读它。

下面的示例显示了第一行,在 Internet 上搜索更完整的示例。

// init shapefile
        File shpFile = new File(fileName);
        if (!shpFile.exists()) {
            LOGGER.fatal(fileName + " does not exist");
        }

        Map<String, URL> connect = new HashMap<String, URL>();
        FeatureCollection collection = null;
        FeatureIterator iterator = null;
        try {
            connect.put("url", shpFile.toURI().toURL());

            DataStore dataStore = DataStoreFinder.getDataStore(connect);
            String typeName = dataStore.getTypeNames()[0];
于 2012-11-29T01:59:23.690 回答
1

“I want the lat, lon of every house”表明您想要做的是称为地理编码的过程。您可以使用一些服务,有些是免费的(用于有限用途)有些不是。您可以从查看地理编码系统列表开始,了解从哪里开始。我认为您不想从学习 GIS 或 shapefile 开始,而是要提取您尝试进行地理编码的地址。

您可以通过计算每个地块的质心来估计每个房屋的纬度/经度。您可以通过计算每个地块的边界矩形的质心来更粗略地估计每个房屋的纬度/经度。其中任何一个都需要提取地块坐标。如果您对明尼苏达州的每所房子都这样做,您将处理大量数据。地理编码服务会更便宜。人口普查地理编码器可能会有所帮助。

于 2015-01-07T20:42:47.740 回答