mysql 空间数据库使用

来源:互联网 发布:蓝月传奇龙魂升阶数据 编辑:程序博客网 时间:2024/05/29 17:30
对本次获取poi和poly边界信息,又学到很多以前没用接触过的知识。


1、首先从网站上下载原始数据,代码虽然写的不是很好,至少能运行起来,而且很快就把500M的原始数据下载了下来。具体代码见Download.py


2、第一批爬去的是欧洲POI信息,这个都存放在xml里面,内容虽然多,但格式规范,两个正则就搞定了。第一次运行程序,半个小时就爬完了,得到了700w+的数据。
由于好多poi类型对应的name都是空,不能为我们所用。故重新优化代码,把name为空的都pass掉了,最后仍然得到了231w的数据。虽然数量上比第一次减少了很多,但也足够小兰


喝一壶了。


3、第二批是爬去POLY边界信息,都是一堆一堆的LL。这是需要存储到mysql的空间数据库里面,呵呵。。。什么是空间数据库啊,不知道啊。。。。
原来是mysql数据库的一个扩展,http://dev.mysql.com/doc/refman/5.1/zh/spatial-extensions-in-mysql.html#gis-class-polygon 这是mysql5.1中文官方教程,多学学吧。


最主要的是Polygon和multipolygan两者为多边形类。GeoFromText('polygon((1 1,1 2,2 2,2 1,1 1))')把text格式多边形转换为数据库里面的几何多边形,从而存入数据库。
或者使用PolygonFromText()/MultiPolyFromText()。具体格式看教程吧。


这里我存入数据库的格式为MultiPolygon(),一行数据里面可以存入多个多边形,可以适用于岛或区域比较零散的边界。


数据存好之后,就剩测试数据正确性了。第一次使用的数据库版本为mysql5.1.3的数据库,查询使用的是最小边界矩形MBR来测试,但是测试结果总有偏差,在青海拿一个LL都跑到


甘肃和新疆去了。甚至跑到美国了。。。。。。


经过大师指导,更新数据库版本到5.6.1以上,可以使用ST_代替MBR。因为ST_使用的是图形形状来存储和查询的,效果比MBR更好。从官网下载新版本数据库,装上去测试,结果就


是精确,没用在出现过其他地方偏差。


我在win7上装的是源码编译版的,需要自己编译,而不是直接exe的那种。把程序解压出来后,进入bin里面直接运行mysqld.exe,可以自己运行(其他文件最好不要动),然后运行


mysql.exe,就能打开cmd下的mysql了。这样后台总会有一个mysqld.ext的进程,如果kill掉,mysql也就挂了,还得重新运行mysqld.exe。
原创粉丝点击