Rover's Official Blog

Map/GPS/GIS/WebMap

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  47 随笔 :: 0 文章 :: 437 评论 :: 41 引用

2006年5月28日 #

以前写了篇MapBar的JS研究,其实个人感觉MapBar的JS还是蛮成熟的,对象模型,也是非常多的对象方法,如果能够开放JS,也说不定不比灵图差。只是放出来这么久都没有人告诉他们的研究的东西。是没有去研究还是不愿意讲?我看了下下载,也有2000多次了,唉。
回到题目,这篇是想和大家探讨地图切割的方法的。因为个人说了,Mapbar的JS还是很成熟的,所以我就直接用Mapbar的JS了,谁叫我不懂JS呢,悲哀。但地图如何替换为你自己的?这里就是要谈的切割方法。
因为一般的地图为MAPINFO的格式,所以不是用MAPBASIC就是用MAPX来批量输出图片。那么如何输出图片呢?考虑的重点:投影。1。MAPBAR到底是采用了什么投影?投影我不清楚,也一直还没有搞明白,只是感觉MAPBAR不是用的WGS84。那么我根据300象素的长宽和实际地图经度和纬度差是否可以算出投影呢?2。MAPBAR中的1度大概为100KM,和真实的111KM是否有影响,如果影响是否和投影又有关系。
自己做了个样例,用的是上海市样图数据,大概作出了点效果,作了四级,13、12、11和10,只是这个精度上好像问题比较大。特别是12和11跨越的时候偏移太大,这个可能是我处理时存在错误。个人做法:用MAPBASIC做了点方块框,然后用MAPX根据框批量输出图片,只是这里的算法总觉得有问题。

先放样例上来,下载地址:http://www.cnblogs.com/Files/Tangf/MapBar_My.rar
使用方法:下载后直接解压到IIS或者APACHE的主目录即可。
注意本样例已经完全在本地运行,没有连接任何外部网络。

posted @ 2006-05-28 18:21 Rover.Tang 阅读(4704) | 评论 (50)编辑

问题的提出:已知点P(经纬度),查找该点最临近的点D(点,线,面),返回D的名称及与P的方向,位置和距离关系,地物总数大于50万个
问题的问题:
一:是否基于控件?基于控件和非基于控件应该怎么做?
二:坐标系统是什么系统?(一般是WGS84的坐标系统)
三:最临近的点D(点,线,面),这里线和面对象的点是中心还是节点?(这里可能只讨论中心点,节点略微复杂)

可能是很简单的问题,可惜我不会,特向大家讨教。
思路:遍历。那么如何优化?

自己用MAPX傻傻的做了下。先简单的介绍下我的思路。
使用的是MAPX的SearchWithinDistance方法,只是做了下权衡,设置了一个搜索半径距离和一个搜索最大数量。
虽然简单的看是可以做成,但问题很多。一是MAPX的SearchWithinDistance方法是否也是遍历实现?二是距离和数量之间如何权衡?
如果对于情况一,那么我就不需要使用SearchWithinDistance方法,直接遍历各个点来求距离。对于情况二,对于最近地物的距离为1米和1000米肯定是不一样的,那么如何设置距离,控制数量又该如何设置?
还有一个问题:如何确定方向。
本来想用个反正弦函数,结果实在想不起来这个函数。对于直角坐标系那么用求出角度即可确定方向,那么对于球面体也用直角坐标系?至少应该经过投影。所以我想知道问题的问题二的原因。
请大家把这个方向问题补充完整,谢谢。给个参考网址:http://www.pep.com.cn/200503/ca688391.htm,我是没有看懂。
个人感觉SearchWithinDistance方法也用了遍历,所以直接自行遍历比加这个SearchWithinDistance方法应该要好一点。
如果有朋友有好的思路请补充,谢谢。

忘了贴代码,补上:http://www.cnblogs.com/Files/Tangf/neardis.rar (VB6+MAPX5.02中文版环境下调试成功,文件中用时的计算是错误的)

优化:
个人思路一:从原始数据着手,分割数据。
应该讲许多公司都是采用这样的方法的,只是,我不明白这个具体如何操作,也只能浅谈下我的思路。
假如已知点在图幅a内,那么首先遍历a到i图幅内的点,如果有则比较计算出最近的点,如果没有则再扩大一圈来计算点。
当然这里可能在原始数据中需要处理,并非完全基于拓扑关系计算。如果紧紧知道点P,则先计算点P所在图幅号,结果是a,则遍历a和a周围的所有图幅。如果不存在最近点则继续遍历b到i的图幅的外围图幅。
图幅建议使用方形,否则范围太大的情况下可能会错误。

posted @ 2006-05-28 11:32 Rover.Tang 阅读(1193) | 评论 (5)编辑

一直不明白公交换乘的原理,更不懂最短路径的算法,只是有点想法,想说出来看大家觉得是否可行。
先贴一个来自GIS开发者的《GIS中最短路径的实现》,和GIS空间站的《GIS 领域最短路径搜索问题的一种高效实现》,以及台湾的《最短路径问题》

如果是基于拓扑关系的公交换乘也许简单些,毕竟节点什么的通过拓扑关系肯定有了。也许更复杂些,因为判断拓扑关系的话可能需要遍历所有的路径,这样速度可能会变慢。
那么基于数据库的公交换乘肯定也应该有这些拓扑关系,只是这个拓扑关系应该保存在数据库中(不明白GeoDataBase中的拓扑关系是什么保存的)。那么拓扑关系应该如何保存呢?表应该如何建立呢?先画个模型图,不知道正确与否,如果错误请指正。

图中指出,公交换乘和站台(Node)、路段(Road)距离有关,其中又与枢纽站(V什么的单词,忘了,不好意思,用Hinge代替下吧,Hinge是特殊的Node)有很大的关系。
无法表达清楚我的意思,大体意思是起点处开始搜索下一节点,下一节点是枢纽则搜索枢纽相交的线路,继续搜索每条线路上的节点,如此反复,直到最后到达终点。当然这样会算出很多条路线,有些路线换乘多有些路线换乘少,那么控制换乘次数(不要超过3次),并控制最短路径(各站点间距离之和),这样算是最佳路径呢?
请哪位理解的朋友帮我在这里用VISO这样的软件画个流程图,谢谢了。

换乘一:从B4到C5。
方案1:B4->B3->H1(B2/C2)->H2(A2/C3)->C4->C5
换乘次数/枢纽站:1/2
距离:DB3+DB2+DC2+DC3+DC4
方案2:B4->B5->B6->H3(B7/C6)->C5
换乘次数/枢纽站:1/1
距离:DB4+DB5+DB6+DC5

换乘二:从A1到C6。
方案1:A1->H2(A2/C3)->C4->C5->H3(B7/C6)
换乘次数/枢纽站:1/1
距离:DA1+DC3+DC4+DC5
方案2:A1->H2(A2/C3)->H1(B2/C2)->B3-B4->B5->B6->H3(B7/C6)
换乘次数/枢纽站:2/2
距离:DA1+DC2+DB2+DB3+DB4+DB5+DB6

换乘三:从A1到B4。
方案1:A1->H2(A2/C3)->C4->C5->H3(B7/C6)->B6-B5-B4
换乘次数/枢纽站:2/2
距离:DA1+DC3+DC4+DC5
方案2:A1->H2(A2/C3)->H1(B2/C2)->B3-B4
换乘次数/枢纽站:2/2
距离:DA1+DC2+DB2+DB3

搞不懂MAPBAR的公交换乘,只是觉得它的公交换乘很烂,他们的肯定不是基于矢量地图的,那么是基于数据库的?极索的好一点,可能是基于JAVA小程序的缘故?还是因为它预先保存了公交线路换乘?
实在是表达不清楚,请大家补充。
如果思路明了了,那么数据库该如何建立?每条公交线路、每条公交线路站点、相邻公交站点间的距离、枢纽站的公交线路等这些信息在数据库中如何存放和组织?

posted @ 2006-05-28 11:17 Rover.Tang 阅读(4986) | 评论 (17)编辑