http://www.cnblogs.com/everyyear/articles/5172420.html

最近公司有一需求:局域网内有一服务器需要进行地址解析,对精度要求不用太高,但请求量非常大(每秒1000次以上),搭配个ArgGIS Server貌似可以,但面临的问题是:软件不是免费的,另外就是数据哪里来? 纠结了几天,无果。

偶然在网上看见一篇博文《 利用gis通过shp文件将经纬度解析为城市名 》,JAVA的,对编程语言不太熟悉, 好不容易编译通过,测试,相当顺畅,只是性能满足不了要求。但该文章也给了我很好的思路,其原理大概是:

(1)读取Shapefile文件的多边形数据,保存到List中。

(2)给定指定的经纬度,迭代List, 判断点是否在多边形的外框内(外框是指,恰好包含多边形的矩形,shapefile文件中有)

(2)如果点在外框内,判断是否在多边形中。

(3)如果点在多边形中,则找到匹配结果。

点在多边形算法,见 老外写的一篇文章 http://alienryderflex.com/shortest_path/ ,国外有人翻译成中文了,见 http://blog.csdn.net/hjh2005/article/details/9246967

当然,按照上面的算法, 效率肯定不会太高, 因为,假如一个点在北京,不应该判断点是否在广东。

工程下载链接在后面,编译器VS2012,为了方便演示,地图使用百度离线地图,通过js调用C++解析地址。

最后上个效果图:

相关文件下载

数据文件压缩包1

数据文件压缩包2

require "offline_geocoder" geocoder = OfflineGeocoder . new results = geocoder . search ( 51.5214588 , - 0.1729636 ) p results 上面的代码会输出这个: { :lat => 51.51116 , :lon => - 0.18426 , :name => "Bayswater" , :admin1 => "England" , :admin2 => "Greater Lond 目录如何使用Gradle设置第一步第二步导入数据获取导入状态获取现有数据库列表地理编码(根据关键字搜索地点)反向地理编码(根据地理坐标搜索地点名称)获取完整 地址 搜索结果展示正向地理编码反向地理编码性能存储空间commitFrequency(提交频率)时间数据写入地理编码CPU内存开放街道地图数据网站目前的问题和开发计划如果您认为对您有帮助,请别忘了给我点star: Osmunda是一个Androi... 通常为了获取高精度的数据,可以采用百度or高德的逆地理编码接口,但是个人请求量受限,企业版限额会高一些。本文提供一种 离线 方案,实现经纬转 地址 信息的方案,精度为乡镇街道粒度,响应速度单核4ms/每条,能满足一般的逆地理编码需求。本文分模块提供如下代码。程序主入口为 getGeoInfo,具体参考如下代码。........................ >> > from rgeocoder import ReverseGeocoder >> > rg = ReverseGeocoder () >> > r = rg . nearest ( 41.891929 , 12.511331 ) # lat, lon >> > print ( r . name , r . cc ) 'Rome IT' >> > print ( r . lat , r . lon ) 41.89193 12.51133 一些地点包括第一级和第二级行政区划: >> > print ( r . admin1 ) 'Latium' >> > print ( r . admin2 ) 'Citta metrop 如果你只是想实现逆 解析 功能,那该步骤可以跳过,因为地图数据已经收集打包好了。直接文末找git路径就好了。 准备工作:python numpy h5py openpyxl cython 申请高德key,参考:https://blog.csdn.net/qq_32444825/article/details/79441900 key 填入 getRegions.py amap_key变量中 技术点:JAVA java.awt.Polygon.contains方法 查询坐标是否包含再多边形中 资源:https://datav.aliyun.com/tools/atlas/index.html下载所需要的省份城市信息,下载中国城市级别可以参考下面文末下载地图命令 也整理一份到资料中;特别说明,如果 解析 城市北京上海重庆天津澳门香. 百度地图开放平台:(http://lbsyun.baidu.com/) Geocoding API 是一类接口,用于提供从 地址 到经纬度坐标或者从经纬度坐标到 地址 的转换服务,用户可以使用C# 、C++、Java等开发语言发送请求且接收JSON、XML的返回数据。 Geocoding API 已全面支持HTTP/HTTPS两种请求形式。后文介绍中以HTTP请求为例。 geocoding.png JS 解析 shapefile 并在地图加载演示 为了解决SHP文件上传过程中用户需要预览,或者shp小文件需要 进行 实时加载,后端 解析 太频繁的问题。现在可以通过HTML5的方式直接读取本地文件,将 解析 的二进制流按照shp 和dbf的格式读取后按照ol的规范拼装features并加载图层。 程序主要的几个点有: 本地文件读取: 借助H5的FileReader,可以轻松读取本地...    这几天一直搞shp文件的 解析 ,首先是 解析 成json串,后来直接 解析 入数据库,今天把东西整合一下,记下笔记. Shapefile 属于一种矢量图形格式,它能够保存几何图形的位置及相关属性。我的理解就是:shape文件首先它不仅仅只是一个文件,它可以是一个文件夹.里面包含很多文件,其中有三个文件是必不可少的,分别是".shp", ".shx"与 ".dbf" 文件. 必须的文件: .shp ...