经度136.83954经纬度查询地图70.493744是哪

通过GEO HASH,抓取每个格子里的点的地址信息,然后把这个地址信息作为GEO中点坐标的一个信息,当查询给定经纬度是在哪个城市的时候,查询过程是查询距离这个经纬度最近的带有地址的点,认为给定经纬度和最近的这个点是同一个地址下的。通过不断完善GEO中的每个坐标下的地址信息,可以提高整个系统的精度。这种方法相当于一种间接获取的方法的。
我们知道每个地区是有一定区域的,可以认为是一个闭合的多边形,定位城市,可以理解为判断某个点,是否在某个区域内。
第一点:如何获取城市的区域边界
很幸运的是百度地图提供了这样的API
&!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&
&html xmlns="http://www.w3.org/1999/xhtml"&
&meta http-equiv="Content-Type" content="text/ charset=utf-8" /&
&title&获取地区轮廓线&/title&
&script type="text/javascript" src="http://api./api?v=1.3"&
&style type="text/css"&
body{font-size:13px;margin:10px}
#container{width:<span style="background-color: #f5f5f5; color: #px;height:<span style="background-color: #f5f5f5; color: #px;border:1px solid gray}
&div id="container"&&/div&
输入省、直辖市或县名称:&input type="text" id="districtName" style="width:80px" value="重庆市"&
&input type="button" onclick="getBoundary()" value="获取轮廓线"&
&script type="text/javascript"&
var map = new BMap.Map("container");
map.centerAndZoom(new BMap.Point(116.403765, 39.914850), 5);
map.addControl(new BMap.NavigationControl({type: BMAP_NAVIGATION_CONTROL_SMALL}));
map.enableScrollWheelZoom();
function getBoundary(){
var bdary = new BMap.Boundary();
var name = document.getElementById("districtName").
bdary.get(name, function(rs){
//获取行政区域
map.clearOverlays();
//清除地图覆盖物
var count = rs.boundaries. //行政区域的点有多少个
for(var i = 0; i & i++){
var ply = new BMap.Polygon(rs.boundaries[i], {strokeWeight: 2, strokeColor: "#ff0000"}); //建立多边形覆盖物
map.addOverlay(ply);
//添加覆盖物
map.setViewport(ply.getPath());
//调整视野
如果没有这样的API,我们也可以变相获得,大多数地图提供了通过经纬度获取地址信息的API,我们可以取一个城市内的一点,然后在城市外周围再取N个点,我们通过二分的方法,可以不断逼近边界
function border($city, $p1, $p2) {
$tpl = 'http://api./geocoder/v2/?ak=你的应用key&callback=renderReverse&location=%s,%s&output=json&pois=1';
while ($i&0) {
$p1X = $p1[0];
$p1Y = $p1[1];
$p2X = $p2[0];
$p2Y = $p2[1];
$dX = abs($p1X - $p2X) / 2;
$dY = abs($p1Y - $p2Y) / 2;
$mX = min($p1X,$p2X) + $dX;
$mY = min($p1Y,$p2Y) + $dY;
$url = sprintf($tpl, $mY, $mX);
$content = rtrim(strstr(file_get_contents($url), "{", false), ")");
$data = json_decode($content, true);
if (($data['result']['addressComponent']['city']) == $city) {
$p1[0] = $mX;
$p1[1] = $mY;
$p2[0] = $mX;
$p2[1] = $mY;
return array($p1[0],$p1[1]);
第二点:知道了区域,如何知道点在区域内
左边的图是从某个点向待检测的点引射线,右边的图是从待检测的点,向某个点引射线,这两种方法都可以,判断射线与闭合区域每条边相交的次数,如果是奇数次的话,可以判断点在区域内,如果是偶数次的话,可以判断点不在区域内。
实际编程中,第二种方法实现起来会更简单一些,而且我们都是向X轴的正方向引射线会更简单。
第三点:如何检测某个点正方向的射线和某条边相交
给定直线P1P2,判断点P平行于X轴正方的射线是否与直线P1P2相交?
首先,满足相交的条件,必须Py夹在P1y和P2y之间。
其次,满足相交的条件,Px小于P1P2最大x,不然肯定不想交了。
最后,P1,P2知道这两个点可以确定一条直线方程y=ax+b,然后p点正方的射线实际是y=Py的直线方程,这两条直线可以求出他们的焦点的x坐标xinters。如果Px小于xinters说明是在直线的y=ax+b的左边,向右引射线肯定能相交,如果Px大于xinters说明在y=ax+b的右边,向右引射线肯定不相交。
附上一段实现的代码
#define MIN(x,y) (x & y ? x : y)
#define MAX(x,y) (x & y ? x : y)
typedef struct {
double x,y;
int InsidePolygon(Point *polygon,int N,Point p)
int counter = 0;
Point p1,p2;
p1 = polygon[0];
for (i=1;i&=N;i++) {
p2 = polygon[i % N];
if (p.y & MIN(p1.y,p2.y)) { //低
if (p.y &= MAX(p1.y,p2.y)) { //高
if (p.x &= MAX(p1.x,p2.x)) { //右
if (p1.y != p2.y) { //简单忽略平行X轴这种情况
xinters = (p.y-p1.y)*(p2.x-p1.x)/(p2.y-p1.y)+p1.x; //交叉点坐标 参考./media/point-and-polygon/xinters.jpg
if (p1.x == p2.x || p.x &= xinters)
counter++;
if (counter % 2 == 0)
第四:幸运的是JAVA中的awt.Polygon已经实现了类似的算法
以下代码判断了一个经纬度是否在北京范围内
import java.awt.*;
public class Main {
public static void init(Polygon p) {
String s = "117......717;117.3012;117......475;117..................604, 40.....421;117...2321;117........212;117...2643;117............985;117.........................483;117........461;117........865;117...........................2633;117...........1341;117.............................071;116.8295;116...................893;116...7135;116...............7302;116..........................................7;116.6061;116..672, 40..........5409;116........................902;116......232;116......215;116........967, 40.752;116..................806;116........837;116....582;116..............................782;116.1765;116....................224;116.....0188;116.0671;115.....9401;115...........8572;115................................134, 40........9277;115.9176;115.....9907;115....072;115...9726;115..17;115.....9582;115..........076;115...834;115..........207;115.....................6591;115.6824;115..374;115...............4354;115.............4449;115.................5913;115........512;115.......5205;115...................596;115............104;115.4617;115......146;115.............5252;115............304;115.........042;115..297;115....176;115......389;115.7173;115................061;115.8647;115..423;115...94;115.902;115.........979;115........154;115..................333, 39........1423;116....402;116..........232;116..................................347;116...4161;116...................5538;116........511;116....922;116.6675;116...6435;116...6935;116....557;116......................................652;116....................................864, 39...208, 39...........936;116...................................763;116............915;116......645, 40..................9388;116...447;117.0834;117.0702;117...............1069;117....165;117...........................3087;117...................3684;117....233095";
for ( String t : s.split(";")) {
int x = (int) (Float.parseFloat(t.split(",")[0]) * 1000);
int y = (int) (Float.parseFloat(t.split(",")[1]) * 1000);
p.addPoint(x, y);
public static boolean contains(Polygon p, float x, float y) {
return p.contains(x * 1000, y * 1000);
public static void main(String[] args) {
Polygon p = new Polygon();
contains(p, 116.270313f, 39.909622f);
contains(p, 115.590763f, 40.032598f);
contains(p, 115.903517f ,40.875831f);
阅读(...) 评论()重新组织索引:alterindexidx_OrderIDondbo.OrderDgo重建表:altertableOrderDgo
);GO--Resetthedatabaserecoverymodel.ALTERDATABASEDATABASENAMESETRECOVERYFULL;GO
Facebook开源的Go函数库集,将近40个Go函数库开源
ruby-e&$(curl-fsSL/Homebrew/homebrew/go/install)&
自动完成支持GO语言增强:GO包浏览器GO包向导GO包编译GO标准API检索GO类视图GO文档浏览GOCODE支持项目主页:
地址:http://brew.sh安装:ruby-e"$(curl-fsSL/Homebrew/homebrew/go/install)"
].[Sk_Recruit]addconstraintDF_Sk_Recruit_lastcommenttimeDEFAULT(getdate())for[lastcommenttime]go
:outofmemory(stackcacherefill)runtimestack:runtime.throw(0x45f820)c:/go/src/pkg/runtime/panic.c
正则表达式在线测试工具
FaceYe @ 2015 &&&&
ICP备案号:粤ICP备1500070福建各地经纬度_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
福建各地经纬度
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
你可能喜欢copyright &
www.d1xz.net

我要回帖

更多关于 百度地图经纬度 的文章

 

随机推荐