将dbf形状数据中的每个地址转换为lat/lon的GIS数据文件



我需要来自GIS数据的Lat/LON

我有来自的数据文件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

但我该怎么办?

我要每个房子的租金

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

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

因为,首先,您的数据不在长/纬度(地理)坐标中。形状文件的.prj部分(是的,所有具有相同名称的.dbf、.prj、.sbn、.sbx、.shp和.shx文件都是GIS的一个形状文件)表示数据位于投影坐标系NAD 1983 UTM Zone 15N中。所以,您需要将数据转换为地理系统。这可以在GIS中轻松完成,也可以通过proj.4库进行编程。(在Qgis中,将形状文件添加到项目中,然后在目录中选择它,用鼠标右键单击并选择"另存为…"。它会要求您提供目标坐标系。)请注意,您需要决定您想要的地理坐标,因为您的数据在北美基准(NAD 1983)中,但现在世界上最常见的是WGS 1984。

其次,在GIS中,你会看到你的数据,它们真的是点,还是多边形。(如果你的房子是多边形,你需要在Qgis菜单"矢量-几何体工具-多边形质心"中获取它们的质心)。

最后,当你真的把你的房子作为地理坐标中的点时,你可以得到它们的坐标,例如,使用这些问题中的建议获得层中点的坐标列表,以及如何使用QGIS计算点的纬度和经度。

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

上面的文件扩展名显示,这些文件采用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];

"我想要每个房子的lat,lon"表明您想要做的是一个称为地理编码的过程。有些服务可以用于此,有些是免费的(有限使用),有些则不是。您可以从查看地理编码系统列表开始,了解从哪里开始。我认为你不想从学习GIS或shapefile开始,除了提取你试图进行地理编码的地址。

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

相关内容

最新更新