Archive for the Category: shape file

ArcGIS 支持mongodb作为数据源

mongodb 作为典型的NoSQL数据库,可以存储点类型的空间数据。目前ArcGIS 以plugin的方式支持mongodb作为datasource。 mongodb plugin for ArcGIS 可以在ArcGIS.com上下载,编译前需要下载Mongodb C#driver Mongodb C#driver 下载地址:https://github.com/mongodb/mongo-csharp-driver mongodb plugin for ArcGIS 下载地址:http://www.arcgis.com/home/item.html?id=25d12436c73a43c98c711826f9f662e4 1 代码下载下来之后,使用vs2010 编译,编译后会得到3个dll,MongoDBCommands.dll,MongoDBPlugIn.dll,MongoDBPluginUI.dll 2 使用ESRIRegAsm.exe(C:\Program Files (x86)\Common Files\ArcGIS\bin 目录下) 注册MongoDBCommands.dll,MongoDBPlugIn.dll 3 在ArcMap 的customize中添加MongoDBCommands.dl,会将MongoDB工具注册到ArcGIS界面中,如下图: 4 使用这两个工具即可导入、导出数据到mongodb     参考资料: http://blogs.esri.com/esri/arcgis/2012/05/02/mongodb-example-code-for-adding-a-nosql-plug-in-data-source/

Also posted in ArcGIS Leave a comment

使用ArcGIS制作virtualNetwork中的网络数据

在SpatiaLite VirtualNetwork 介绍文章中介绍了virtualNetwork,其中virtualNetwork的网络数据要求制作arc,并指出arc的起始节点和终止节点。 那么根据我们在GIS中获取地铁线路数据文中用的方法获取到的地铁数据如何制作一个能够进行网络分析的数据呢,方法很简单,使用ArcGIS。 1 打开ArcGIS,加载地铁线路数据和地铁站数据 2 检查并编辑数据,看一下换乘站和各线是否连通,由于数据不准确,会在后面的过程中造成问题。当然这个地方也可以使用arcgis的topo规则进行检查。 3 使用split line at point 工具将地铁线路使用地铁站打断,这样得到的每条线段即为一个arc,我们称之为arc图层。 4 下面计算arc的起始和终止节点,使用spatial join工具,将得到的arc图层和地铁站进行空间join,选择JOIN_TO_MANY,保证能把起始终点全部join。 在join后的结果列表arc_join中可以发现每个arc都都有两条结果,这两个结果不是按照线路的顺序来的,不过对于无向图,这个无所谓。 5 现在arc的起始和结束节点已经有了,但是存储在两条记录里,我们要把这些合并到一条记录里,打开arc_join的属性表,选择summarize,使用summarize来进行统计。选择地铁站名对应的字段,选择Fisrt和last。 统计结果(arc_join_sum)如下图,每个targetFID对应的起始和重点地铁站都在一条记录中了。 剩下来就比较简单了,使用属性join工具,将arc图层和arc_join_sum使用objectID 和targetFID进行关联,将地铁站名字段复制到arc图层。 再将arc图层和地铁站点图层根据地铁站名进行关联,把地铁站FID作为F_NODE和T_NODE进行赋值。  

Also posted in ArcGIS, spatialite, Uncategorized Leave a comment

GIS中获取地铁线路数据

注:本文只是提供使用python解析数据的方法,数据版权归amap所有,同学们如果想使用数据请联系数据提供商购买。 看了老王的文章《GIS中公交数据的下载和处理》收获很大,那么我也介绍一种不用silverlight的方法获取地铁数据,同学们看了我的前两篇博客 使用python处理json 和使用pyshp处理shapfile就可以猜到了,我们全部用python来进行。 1 首先用chrome 打开高德地图网站:http://www.amap.com/map.html 2 按f12 打开chrome 的developer 工具 3 在地图搜索输入框中选择公交换乘,并输入地铁一号(注意不是地铁一号线),搜索 4 在developer tool中找到查询结果,得到下面的字符串 jQuery1710991390228504315_1342926130045({“busline”:[{“citycode”:”010″,”length”:34938,”endname”:”四惠东”,”starttime”:”0510″,”statio ns”:[{“code”:”110100″,”station_no”:”1″,”spell”:””ping guo yuan””,”y”:101695452,”name”:”苹果园”,”x”:220846170},{“code”:”110100″,” station_no”:”2″,”spell”:””gu cheng””,”y”:101714107,”name”:”古城”,”x”:220855819},{“code”:”110100″,”station_no”:”3″,”spell”:””ba jiao you le yuan””,”y”:101714101,”name”:”八角游乐园”,”x”:220872188},{“code”:”110100″,”station_no”:”4″,”spell”:””ba bao shan””,”y “:101714107,”name”:”八宝山”,”x”:220889361},{“code”:”110100″,”station_no”:”5″,”spell”:””yu quan lu””,”y”:101714134,”name”:”玉泉路” ,”x”:220902240},{“code”:”110100″,”station_no”:”6″,”spell”:””wu ke song””,”y”:101714087,”name”:”五棵松”,”x”:220917897},{“code”:”1 10100″,”station_no”:”7″,”spell”:””wan shou lu””,”y”:101714074,”name”:”万寿路”,”x”:220933625},{“code”:”110100″,”station_no”:”8″,” spell”:””gong zhu fen””,”y”:101714087,”name”:”公主坟”,”x”:220945040},{“code”:”110100″,”station_no”:”9″,”spell”:””jun shi bo wu guan””,”y”:101714094,”name”:”军事博物馆”,”x”:220955112},{“code”:”110100″,”station_no”:”10″,”spell”:””mu xi di””,”y”:101714174,”n ame”:”木樨地”,”x”:220965495},{“code”:”110100″,”station_no”:”11″,”spell”:””nan li shi lu””,”y”:101714308,”name”:”南礼士路”,”x”:220 976436},{“code”:”110100″,”station_no”:”12″,”spell”:””fu xing men””,”y”:101714302,”name”:”复兴门”,”x”:220979482},{“code”:”110100″ ,”station_no”:”13″,”spell”:””xi dan””,”y”:101714348,”name”:”西单”,”x”:220994249},{“code”:”110100″,”station_no”:”14″,”spell”:””t […]

Also posted in python Leave a comment

使用pyshp处理shapfile

在平时的数据处理中,经常会遇到将字符串或JSON格式数据转成空间数据的需求,使用ArcGIS Engine 或者shapelib单独写个应用程序比较麻烦,需要开发环境。编译,调试等等。那么使用python 直接操作shapefile 是一个比较好的选择。 pyshp 下载地址: https://code.google.com/p/pyshp/  pyshp的使用比较简单 1 下载pyshp,将其放到python的根目录下(当然也可以通过设置path等方式来引用) 2 import shapefile 3 对shapefile进行操作 Reading Points in Shapes >>> import shapefile >>> sf = shapefile.Reader(“shapefiles/blockgroups”) >>> shapes = sf.shapes() >>> # Read the bounding box from the 4th shape >>> shapes[3].bbox [-122.485792, 37.786931000000003, -122.446285, 37.811019000000002] >>># Read the 8th point in the 4th shape […]

Also posted in python Leave a comment

使用ArcGIS API for iOS加载shape File

shape File 为1:400万的全国县级城市(下载地址http://nfgis.nsdi.gov.cn/sdinfo/download.asp)。 底图使用的ArcGIS Online上的街道图 不多说,直接放图:

Also posted in ArcGIS, ArcGIS API for iOS, esri, gis, iOS, iPad, iPhone4 5 Comments

FileGDB Geometry 二进制格式分析

在File Geodatabase API 开发中,对Geometry的读取是其中最核心的内容,但不幸的是File Geodatabase API并没有提供直接对Geometry读写的类,只在Row类中提供了GetGeometry的方法来获取ShapeBuffer。 long GetGeometry(ShapeBuffer& shapeBuffer); ShapeBuffer包含两部分,一个是shapeBuffer,用来存储Geometry的二进制内同,另外一部分是inUseLength,存储该shapeBuffer的长度。 对于shapeBuffer,我们是陌生的,因为其只是一个二进制流,并不知道其内部结构,在File Geodatabase API 的sample中只给了读写点类型数据的例子,对于更复杂的线和面并没有给出相应的例子。因此我们要读写线和面要素,必须破解这两种二进制流,转换成我们想要的线和面对象。 下面首先来看一下读取点的代码: ShapeBuffer geometry; double x, y; memcpy(&x, geometry.shapeBuffer + 4, sizeof(x)); memcpy(&y, geometry.shapeBuffer + 12, sizeof(y)); 通过上面的代码我们可以发现,点类型数据的坐标存储在shapeBuffer中的4-11Byte(x)和12-17 Byte(y),0-3字节没有使用。 通过对shapeBuffer的分析,此处省略一万字…。可以得到下面的几何对象的存储结构示意图: 其中点比较简单,前四位存储几何类型,点的类型为1; 线的前四位同样存储几何类型,线的类型为3,后面32为存储该集合对象的外包络矩形,分别为double类型的xmin,ymin,xmax,ymax。再后面四位存储path的个数。接下来的四位存储总的坐标个数。再后面的4*nPath为存储的是每个path的起始坐标在总的坐标中的下标。最后8*2*nPoints位存储的坐标序列。 面和线的存储方式基本相同,将path换做ring即可。 通过上面的分析,我们就可以使用File GDB API将FileGeoDatabase中数据转换成自定义的格式了。

Also posted in ArcGIS, esri, File Geodatabase API, gis 1 Comment

ShapeFile格式的白皮书

ESRI Shapefile(shp)是Esri公司开发的空间数据开放格式。该文件格式已经成为了地理信息软件界的一个开放标准,成为一个非常重要的交换数据格式,基本上所有的GIS软件都支持Shapefile的读写。 Shapefile属于一种矢量图形格式,它能够保存几何图形的位置及相关属性。该种文件格式是由多个文件组成的: * .shp – 用于保存元素的几何实体。 * .shx – 用于保存几何实体索引。 * .dbf – 数据库,用于保存关于元素的属性信息。 除了以上三个文件格式之外,还可以有其它文件的支持,这样能够优化访问数据库的性能: * .sbn 和 .sbx – 保存实体的空间索引。 * .fbn 和 .fbx – 保存只读实体的空间索引。 * .ain 和 .aih – 保存列表中活动字段的属性索引。 * .prj – 保存坐标系统信息。 * .shp.xml – 保存shapefile的元数据。 附件为ShapeFile格式的白皮书和扩展的shapeFile说明,在扩展的shapeFile中增加了multiPatch的说明。 有个这两个白皮书,我们就可以对shp文件进行深入的了解,也可以根据白皮书来实现对shp的读写。 ESRI_shapefile_technical_description extended shapefile format

Also posted in ArcGIS, esri, gis 1 Comment