Monthly Archives: July 2012

使用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进行赋值。  

ArcGIS, shape file, spatialite, Uncategorized Leave a comment

SpatiaLite VirtualNetwork 介绍

  SpatiaLite  VirtualNetwork 是SpatiaLite的一个扩展,通过SQL语句实现routing功能 SpatiaLite  VirtualNetwork实现了经典的 Dijkstra算法, Dijkstra算法介绍如下: 要使用这个模块,首先要building network,也就是要把网络拓扑构建出来,将地理数据映射到图论的拓扑结构中。 测试数据下载: test-network-2.3.sqlite 1 network需要的地理数据的基本结构如下: column name data type meaning PK_UID INTEGER the primary key identifying each arc F_NODE INTEGER the code identifying the arc’s start node T_NODE INTEGER the code identifying the arc’s end node Type TEXT the road category [i.e. highway, primary …] Speed INTEGER the estimated mean speed [Km/h] TravelTime DOUBLE the […]

network, route, spatialite Leave a comment

spatialite 介绍

spatialite 是一个基于sqlite的开源类库,改类库实现了sqlite的空间扩展,支持sql语句的空间操作。 目前spatialite的最新版本是3.0.1,官方主页为http://www.gaia-gis.it/gaia-sins/ 对于目前如火如荼的移动互联网来说,大部分移动平台都内置提供了sqlite的存储和访问,因此我们可以把spatialite编译到移动平台上,这样移动平台就有了空间数据的支持,并通过比较友好的方式进行数据的读取和存储。

gis, spatialite 1 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 […]

python, shape file Leave a comment

使用python处理json

  python中自带了处理python的模块,使用时候直接import json即可。 >>> import json >>> json.loads(‘[“foo”, {“bar”:[“baz”, null, 1.0, 2]}]’) [u’foo’, {u’bar': [u’baz’, None, 1.0, 2]}] >>> json.loads(‘”\”foo\\bar”‘) u'”foo\x08ar’ 使用loads方法即可将json字符串转换成python对象,对应关系如下: JSON Python object dict array list string unicode number (int) int, long number (real) float true True false False null None 但在使用json模块的时候需要注意的是对中文的处理,loads方法如果传入的字符串的编码不是UTF-8的话,需要用encoding指定字符编码 dataDict = json.loads(dataJsonStr, encoding=”GB2312″);

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 […]

python, shape file Leave a comment

在Xcode4 中将iPhone使用的xib转换成iPad使用的xib

1 以source code 的方式打开xib文件 2 将”com.apple.InterfaceBuilder3.CocoaTouch.XIB” 改为 “com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB”. 3 将 所有 “IBCocoaTouchFramework” 改为 “IBIPadFramework”. 4 修改尺寸,将类似{480, 320} 的尺寸修改为{1027, 768} 5 保存并使用Interface builder 打开 同样,这种方法也可以将iPad的xib转换成iphone使用的xib

ArcGIS API for iOS, iOS, iPad, iPhone4 Leave a comment

在iOS中实现键盘的隐藏

在iOS开发中,经常会遇到点击UISearchbar 中的textFiled后弹出键盘,但又不想搜索,键盘无法隐藏的情况。 特别是cydia应用就是典型的代表。 下面介绍一种方法,在键盘弹出后,轻触页面隐藏键盘的方法: 1 在键盘弹出后添加对屏幕轻触事件进行监听 2 轻触页面,隐藏键盘 3 在隐藏键盘的时候移除对屏幕轻触事件的监听 代码如下: -(void) initGesture { NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; [nc addObserver:self selector:@selector(keyboardWillShow:) name: UIKeyboardWillShowNotification object:nil]; [nc addObserver:self selector:@selector(keyboardWillHide:) name: UIKeyboardWillHideNotification object:nil]; _tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapAnywhere:)]; } -(void) keyboardWillShow:(NSNotification *) note { [self.view addGestureRecognizer:_tapRecognizer]; } -(void) keyboardWillHide:(NSNotification *) note { [self.view removeGestureRecognizer:_tapRecognizer]; } -(void)didTapAnywhere: […]

ArcGIS, ArcGIS API for iOS Leave a comment

在iOS中将string转成UTF-8编码

在iOS开发中,特别是在对Web服务调用的时候,经常会遇到请求参数为中文的情况,那么这时候就需要将Url转成UTF-8编码才能进行请求。 使用stringByAddingPercentEscapesUsingEncoding:方法可以将string转成UTF-8编码, 如下面代码 NSURL *url = [NSURL URLWithString: [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

ArcGIS API for iOS Leave a comment