<?xml version="1.0" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="css/rss.xslt"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>郑州网建 - 地图(Maps)</title><link>http://camnpr.com/</link><description>Good Good Study ,Day Day Up! - </description><generator>RainbowSoft Studio Z-Blog 1.8 Walle Build 100427</generator><language>zh-CN</language><copyright>豫ICP备10013645号 Copyright 2009-2022 camnpr.com</copyright><pubDate>Mon, 04 May 2026 06:38:06 +0800</pubDate><item><title>百度地图(BMap)API应用之获取用户的具体位置(LocalCity)示例代码</title><author>camnpr@163.com (佚名)</author><link>http://camnpr.com/map/1647.html</link><pubDate>Thu, 18 Sep 2014 10:40:19 +0800</pubDate><guid>http://camnpr.com/map/1647.html</guid><description><![CDATA[<div id="noimgcss"><p>功能的大概：用户通过点击地图上面的位置，在地图上面进行描点，然后再把获取的到的地理位置保存到地图上面的地址栏目中。<br /><br /><img src="http://camnpr.com/upload/2014/9/201409181039540235.png" width="680" alt="地图api获取位置-管理系统@郑州网建" /></p><p>主要是百度地图API的使用</p><div>代码如下:</div><pre class="brush:js">var map = new BMap.Map(&quot;allmap&quot;); //实例化一个地图对象<br />var point = new BMap.Point(116.331398,39.897445); //设置地图中心的位置<br />map.centerAndZoom(point,12); //设置地图元素的可视层<br /><br />map.enableScrollWheelZoom();&nbsp;&nbsp;&nbsp; //启用滚轮放大缩小，默认禁用<br />map.enableContinuousZoom();&nbsp;&nbsp;&nbsp; //启用地图惯性拖拽，默认禁用<br /><br />function myFun(result){<br />&nbsp;&nbsp;&nbsp; var cityName = result.name;<br />&nbsp;&nbsp;&nbsp; map.setCenter(cityName);<br /><br />}<br />var myCity = new BMap.LocalCity();<br />myCity.get(myFun);<br /><br />i=0<br />//点击获取坐标<br />map.addEventListener(&quot;click&quot;,function(e){<br /><br />&nbsp;&nbsp;&nbsp; if(i === 0)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp; //存储经纬度<br />&nbsp;&nbsp;&nbsp;&nbsp; lng = e.point.lng;<br />&nbsp;&nbsp;&nbsp;&nbsp; lat = e.point.lat;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp; //在地图上面描点<br />&nbsp;&nbsp;&nbsp;&nbsp; var marker = new BMap.Marker(new BMap.Point(lng,lat));&nbsp; // 创建标注<br />&nbsp;&nbsp;&nbsp;&nbsp; map.addOverlay(marker);<br />&nbsp;&nbsp;&nbsp;&nbsp; marker.enableDragging();&nbsp;&nbsp;&nbsp; //可拖拽<br /><br />&nbsp;&nbsp;&nbsp; var gc = new BMap.Geocoder();<br />&nbsp;&nbsp;&nbsp;&nbsp; //获取地址的数据地址<br />&nbsp;&nbsp;&nbsp;&nbsp; var pt = e.point;<br />&nbsp;&nbsp;&nbsp;&nbsp; gc.getLocation(pt, function(rs){<br />&nbsp;&nbsp;&nbsp;&nbsp; var addComp = rs.addressComponents;<br />&nbsp;&nbsp;&nbsp;&nbsp; address = addComp.province +&nbsp; addComp.city + addComp.district + addComp.street + addComp.streetNumber;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp; //画图<br />&nbsp;&nbsp;&nbsp;&nbsp; var label = new BMap.Label(address,{offset:new BMap.Size(20,-10)});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; marker.setLabel(label);<br />&nbsp;&nbsp;&nbsp;&nbsp; });<br /><br />&nbsp;&nbsp;&nbsp;&nbsp; i=1;<br />&nbsp;&nbsp;&nbsp; }<br /><br />});</pre><p>上面的代码基本都是百度提供的DOME 我只是做了一些简单组合。。 惭愧呀</p></div>]]></description><category>地图(Maps)</category><comments>http://camnpr.com/map/1647.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=1647</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=1647&amp;key=e420afcc</trackback:ping></item><item><title>关于地图定位的请教——如何定位当前位置？</title><author>camnpr@163.com (camnpr)</author><link>http://camnpr.com/map/565.html</link><pubDate>Thu, 10 May 2012 10:29:05 +0800</pubDate><guid>http://camnpr.com/map/565.html</guid><description><![CDATA[<p>应该是不用GPRS和WLAN也可以定位的，不过要在室外了。室内没有卫星信号，再不用GPRS和WLAN那手机怎么定位呀！但是N9的导航我感觉程序没有C7做的好。一个是定位慢，二个是有些地方名输入后点搜索，直接又跳出搜索，没有找到一个地方，而地图上确有这个地方。比如，我在沈阳搜索&ldquo;西塔&rdquo;，一个结果没有找到（也不提示无搜索结果，而是直接跳回输入前的地图界面），但&ldquo;西塔&rdquo;这个地方在地图上确标示着。</p><p><span>基本手机上地图定位，用基站+GPS+网络(WiFi)来实现精准定位的。</span></p><p><span>手机有时要确保：关节电 允许后台 开gprs</span></p><p><span>下边，简述一下，手机wap地图、手机客户端地图定位的方式：</span></p><h2 class="title">Geolocation ：基于浏览器的定位服务</h2><p>android 可以通过android developer 模块里的位置GPS模块开发实现，这个更精准。</p><p><span>&nbsp;</span></p><p>&nbsp;</p>]]></description><category>地图(Maps)</category><comments>http://camnpr.com/map/565.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=565</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=565&amp;key=e553f92f</trackback:ping></item><item><title>中国各城市经纬度数据</title><author>camnpr@163.com (camnpr)</author><link>http://camnpr.com/map/468.html</link><pubDate>Wed, 26 Oct 2011 13:56:39 +0800</pubDate><guid>http://camnpr.com/map/468.html</guid><description><![CDATA[<p><span style="font-size: x-small;">1、中国各主要大城市<span style="font-family: ’Courier New’;">经纬度数据：</span><br />北京市市中心经纬度:(116.41667,&nbsp;&nbsp; 39.91667)<br />上海市区经纬度:(121.43333,&nbsp;&nbsp; 34.50000)<br />天津市区经纬度:(117.20000,&nbsp;&nbsp; 39.13333)<br />香港经纬度:(114.10000,&nbsp;&nbsp; 22.20000)<br />广州经纬度:(113.23333,&nbsp;&nbsp; 23.16667)<br />珠海经纬度:(113.51667,&nbsp;&nbsp; 22.30000)<br />深圳经纬度:(114.06667,&nbsp;&nbsp; 22.61667)<br />杭州经纬度:(120.20000,&nbsp;&nbsp; 30.26667)<br />重庆市区经纬度:(106.45000,&nbsp;&nbsp; 29.56667)<br />青岛经纬度:(120.33333,&nbsp;&nbsp; 36.06667)<br />厦门经纬度:(118.10000,&nbsp;&nbsp; 24.46667)<br />福州经纬度:(119.30000,&nbsp;&nbsp; 26.08333)<br />兰州经纬度:(103.73333,&nbsp;&nbsp; 36.03333)<br />贵阳经纬度:(106.71667,&nbsp;&nbsp; 26.56667)<br />长沙经纬度:(113.00000,&nbsp;&nbsp; 28.21667)<br />南京经纬度:(118.78333,&nbsp;&nbsp; 32.05000)<br />南昌经纬度:(115.90000,&nbsp;&nbsp; 28.68333)<br />沈阳经纬度:(123.38333,&nbsp;&nbsp; 41.80000)<br />太原经纬度:(112.53333,&nbsp;&nbsp; 37.86667)<br />成都经纬度:(104.06667,&nbsp;&nbsp; 30.66667)<br />拉萨经纬度:(&nbsp;&nbsp; 91.00000,&nbsp;&nbsp; 29.60000)<br />乌鲁木齐经纬度:(&nbsp;&nbsp; 87.68333,&nbsp;&nbsp; 43.76667)<br />昆明经纬度:(102.73333,&nbsp;&nbsp; 25.05000)<br />西安经纬度:(108.95000,&nbsp;&nbsp; 34.26667)<br />西宁经纬度:(101.75000,&nbsp;&nbsp; 36.56667)<br />银川经纬度:(106.26667,&nbsp;&nbsp; 38.46667)<br />兰浩特经纬度:(122.08333,&nbsp;&nbsp; 46.06667)<br />哈尔滨经纬度:(126.63333,&nbsp;&nbsp; 45.75000)<br />长春经纬度:(125.35000,&nbsp;&nbsp; 43.88333)<br />武汉经纬度:(114.31667,&nbsp;&nbsp; 30.51667)<br />郑州经纬度:(113.65000,&nbsp;&nbsp; 34.76667)<br />石家庄经纬度:(114.48333,&nbsp;&nbsp; 38.03333)<br />三亚经纬度:(109.50000,&nbsp;&nbsp; 18.20000)<br />海口经纬度:(110.35000,&nbsp;&nbsp; 20.01667)<br />澳门经纬度:(113.50000,&nbsp;&nbsp; 22.20000)&nbsp;<br /><br /><span style="font-family: ’Courier New’;">2、中国主要城市经纬度查询(精确到二级省市)：</span><br /></span><span style="font-size: x-small;"><span style="font-family: ’Courier New’;">所在省 城市名&nbsp;&nbsp; 纬度&nbsp;&nbsp;&nbsp; 经度<br /></span>安徽省 合肥 北纬31.52 东经117.17<br />安徽省 安庆 北纬30.31 东经117.02<br />安徽省 蚌埠 北纬32.56 东经117.21<br />安徽省 亳州 北纬33.52 东经115.47<br />安徽省 巢湖 北纬31.36 东经117.52<br />安徽省 滁州 北纬32.18 东经118.18<br />安徽省 阜阳 北纬32.54 东经115.48<br />安徽省 贵池 北纬30.39 东经117.28<br />安徽省 淮北 北纬33.57 东经116.47<br />安徽省 淮南 北纬32.37 东经116.58<br />安徽省 黄山 北纬29.43 东经118.18<br />安徽省 界首 北纬33.15 东经115.21<br />安徽省 六安 北纬31.44 东经116.28<br />安徽省 马鞍山 北纬31.43 东经118.28<br />安徽省 明光 北纬32.47 东经117.58<br />安徽省 宿州 北纬33.38 东经116.58<br />安徽省 天长 北纬32.41 东经118.59<br />安徽省 铜陵 北纬30.56 东经117.48<br />安徽省 芜湖 北纬31.19 东经118.22<br />安徽省 宣州 北纬30.57 东经118.44<br />澳门&nbsp;&nbsp; 澳门市 北纬21.33 东经115.07<br />北京市 北京市 北纬39.55 东经116.24<br />福建省 福州 北纬26.05 东经119.18<br />福建省 长乐 北纬25.58 东经119.31<br />福建省 福安 北纬27.06 东经119.39<br />福建省 福清 北纬25.42 东经119.23<br />福建省 建瓯 北纬27.03 东经118.20<br />福建省 建阳 北纬27.21 东经118.07<br />福建省 晋江 北纬24.49 东经118.35<br />福建省 龙海 北纬24.26 东经117.48<br />福建省 龙岩 北纬25.06 东经117.01<br />福建省 南安 北纬24.57 东经118.23<br />福建省 南平 北纬26.38 东经118.10<br />福建省 宁德 北纬26.39 东经119.31<br />福建省 莆田 北纬24.26 东经119.01<br />福建省 泉州 北纬24.56 东经118.36<br />福建省 三明 北纬26.13 东经117.36<br />福建省 邵武 北纬27.20 东经117.29<br />福建省 石狮 北纬24.44 东经118.38<br />福建省 武夷山 北纬27.46 东经118.02<br />福建省 厦门 北纬24.27 东经118.06<br />福建省 永安 北纬25.58 东经117.23<br />福建省 漳平 北纬25.17 东经117.24<br />福建省 漳州 北纬24.31 东经117.39<br />甘肃省 兰州 北纬36.04 东经103.51<br />甘肃省 白银 北纬36.33 东经104.12<br />甘肃省 敦煌 北纬40.08 东经94.41<br />甘肃省 嘉峪关 北纬39.48 东经98.14<br />甘肃省 金昌 北纬38.28 东经102.10<br />甘肃省 酒泉 北纬39.44 东经98.31<br />甘肃省 临夏 北纬35.37 东经103.12<br />甘肃省 平凉 北纬35.32 东经106.40<br />甘肃省 天水 北纬34.37 东经105.42<br />甘肃省 武威 北纬37.56 东经102.39<br />甘肃省 西峰 北纬35.45 东经107.40<br />甘肃省 玉门 北纬39.49 东经97.35<br />甘肃省 张掖 北纬38.56 东经100.26<br />广东省 广州 北纬23.08 东经113.14<br />广东省 潮阳 北纬23.16 东经116.36<br />广东省 潮州 北纬23.40 东经116.38<br />广东省 澄海 北纬23.28 东经116.46<br />广东省 从化 北纬23.33 东经113.33<br />广东省 东莞 北纬23.02 东经113.45<br />广东省 恩平 北纬22.12 东经112.19<br />广东省 佛山 北纬23.02 东经113.06<br />广东省 高明 北纬22.53 东经112.50<br />广东省 高要 北纬23.02 东经112.26<br />广东省 高州 北纬21.54 东经110.50<br />广东省 鹤山 北纬22.46 东经112.57<br />广东省 河源 北纬23.43 东经114.41<br />广东省 花都 北纬23.23 东经113.12<br />广东省 化州 北纬21.39 东经110.37<br />广东省 惠阳 北纬22.48 东经114.28<br />广东省 惠州 北纬23.05 东经114.22<br />广东省 江门 北纬22.35 东经113.04<br />广东省 揭阳 北纬22.32 东经116.21<br />广东省 开平 北纬22.22 东经112.40<br />广东省 乐昌 北纬25.09 东经113.21<br />广东省 雷州 北纬20.54 东经110.04<br />广东省 廉江 北纬21.37 东经110.17<br />广东省 连州 北纬24.48 东经112.23<br />广东省 罗定 北纬22.46 东经111.33<br />广东省 茂名 北纬21.40 东经110.53<br />广东省 梅州 北纬24.19 东经116.07<br />广东省 南海 北纬23.01 东经113.09<br />广东省 番禺 北纬22.57 东经113.22<br />广东省 普宁 北纬23.18 东经116.10<br />广东省 清远 北纬23.42 东经113.01<br />广东省 三水 北纬23.10 东经112.52<br />广东省 汕头 北纬23.22 东经116.41<br />广东省 汕尾 北纬22.47 东经115.21<br />广东省 韶关 北纬24.48 东经113.37<br />广东省 深圳 北纬22.33 东经114.07<br />广东省 顺德 北纬22.50 东经113.15<br />广东省 四会 北纬23.21 东经112.41<br />广东省 台山 北纬22.15 东经112.48<br />广东省 吴川 北纬21.26 东经110.47<br />广东省 新会 北纬22.32 东经113.01<br />广东省 兴宁 北纬24.09 东经115.43<br />广东省 阳春 北纬22.10 东经111.48<br />广东省 阳江 北纬21.50 东经111.58<br />广东省 英德 北纬24.10 东经113.22<br />广东省 云浮 北纬22.57 东经112.02<br />广东省 增城 北纬23.18 东经113.49<br />广东省 湛江 北纬21.11 东经110.24<br />广东省 肇庆 北纬23.03 东经112.27<br />广东省 中山 北纬22.31 东经113.22<br />广东省 珠海 北纬22.17 东经113.34<br />广西自治区 南宁 北纬22.48 东经108.19<br />广西自治区 北海 北纬21.28 东经109.07<br />广西自治区 北流 北纬22.42 东经110.21<br />广西自治区 百色 北纬23.54 东经106.36<br />广西自治区 防城港 北纬21.37 东经108.20<br />广西自治区 贵港 北纬23.06 东经109.36<br />广西自治区 桂林 北纬25.17 东经110.17<br />广西自治区 桂平 北纬23.22 东经110.04<br />广西自治区 河池 北纬24.42 东经108.03<br />广西自治区 合山 北纬23.47 东经108.52<br />广西自治区 柳州 北纬23.19 东经109.24<br />广西自治区 赁祥 北纬22.07 东经106.44<br />广西自治区 钦州 北纬21.57 东经108.37<br />广西自治区 梧州 北纬23.29 东经111.20<br />广西自治区 玉林 北纬22.38 东经110.09<br />广西自治区 宜州 北纬24.28 东经108.40<br />贵州省 贵阳 北纬26.35 东经106.42<br />贵州省 安顺 北纬26.14 东经105.55<br />贵州省 毕节 北纬27.18 东经105.18<br />贵州省 赤水 北纬28.34 东经105.42<br />贵州省 都匀 北纬26.15 东经107.31<br />贵州省 凯里 北纬26.35 东经107.58<br />贵州省 六盘水 北纬26.35 东经104.50<br />贵州省 清镇 北纬26.33 东经106.27<br />贵州省 铜仁 北纬27.43 东经109.12<br />贵州省 兴义 北纬25.05 东经104.53<br />贵州省 遵义 北纬27.42 东经106.55<br />海南省 海口 北纬20.02 东经110.20<br />海南省 儋州 北纬19.31 东经109.34<br />海南省 琼海 北纬19.14 东经110.28<br />海南省 琼山 北纬19.59 东经110.21<br />海南省 三亚 北纬18.14 东经109.31<br />海南省 通什 北纬18.46 东经109.31<br />河北省 石家庄 北纬38.02 东经114.30<br />河北省 安国 北纬38.24 东经115.20<br />河北省 保定 北纬38.51 东经115.30<br />河北省 霸州 北纬39.06 东经116.24<br />河北省 泊头 北纬38.04 东经116.34<br />河北省 沧州 北纬38.18 东经116.52<br />河北省 承德 北纬40.59 东经117.57<br />河北省 定州 北纬38.30 东经115.00<br />河北省 丰南 北纬39.34 东经118.06<br />河北省 高碑店 北纬39.20 东经115.51<br />河北省 蒿城 北纬38.02 东经114.50<br />河北省 邯郸 北纬36.36 东经114.28<br />河北省 河间 北纬38.26 东经116.05<br />河北省 衡水 北纬37.44 东经115.42<br />河北省 黄骅 北纬38.21 东经117.21<br />河北省 晋州 北纬38.02 东经115.02<br />河北省 冀州 北纬37.34 东经115.33<br />河北省 廓坊 北纬39.31 东经116.42<br />河北省 鹿泉 北纬38.04 东经114.19<br />河北省 南宫 北纬37.22 东经115.23<br />河北省 秦皇岛 北纬39.55 东经119.35<br />河北省 任丘 北纬38.42 东经116.07<br />河北省 三河 北纬39.58 东经117.04<br />河北省 沙河 北纬36.51 东经114.30<br />河北省 深州 北纬38.01 东经115.32<br />河北省 唐山 北纬39.36 东经118.11<br />河北省 武安 北纬36.42 东经114.11<br />河北省 邢台 北纬37.04 东经114.30<br />河北省 辛集 北纬37.54 东经115.12<br />河北省 新乐 北纬38.20 东经114.41<br />河北省 张家口 北纬40.48 东经114.53<br />河北省 涿州 北纬39.29 东经115.59<br />河北省 遵化 北纬40.11 东经117.58<br />河南省 郑州 北纬34.46 东经11340<br />河南省 安阳 北纬36.06 东经114.21<br />河南省 长葛 北纬34.12 东经113.47<br />河南省 登封 北纬34.27 东经113.02<br />河南省 邓州 北纬32.42 东经112.05<br />河南省 巩义 北纬34.46 东经112.58<br />河南省 鹤壁 北纬35.54 东经114.11<br />河南省 辉县 北纬35.27 东经113.47<br />河南省 焦作 北纬35.14 东经113.12<br />河南省 济源 北纬35.04 东经112.35<br />河南省 开封 北纬34.47 东经114.21<br />河南省 灵宝 北纬34.31 东经110.52<br />河南省 林州 北纬36.03 东经113.49<br />河南省 漯河 北纬33.33 东经114.02<br />河南省 洛阳 北纬34.41 东经112.27<br />河南省 南阳 北纬33.00 东经112.32<br />河南省 平顶山 北纬33.44 东经113.17<br />河南省 濮阳 北纬35.44 东经115.01<br />河南省 沁阳 北纬35.05 东经112.57<br />河南省 汝州 北纬34.09 东经112.50<br />河南省 三门峡 北纬34.47 东经111.12<br />河南省 商丘 北纬34.26 东经115.38<br />河南省 卫辉 北纬35.24 东经114.03<br />河南省 舞钢 北纬33.17 东经113.30<br />河南省 项城 北纬33.26 东经114.54<br />河南省 荥阳 北纬34.46 东经113.21<br />河南省 新密 北纬34.31 东经113.22<br />河南省 新乡 北纬35.18 东经113.52<br />河南省 信阳 北纬32.07 东经114.04<br />河南省 新郑 北纬34.24 东经113.43<br />河南省 许昌 北纬34.01 东经113.49<br />河南省 偃师 北纬34.43 东经112.47<br />河南省 义马 北纬34.43 东经111.55<br />河南省 禹州 北纬34.09 东经113.28<br />河南省 周口 北纬33.37 东经114.38<br />河南省 驻马店 北纬32.58 东经114.01<br />黑龙江省 哈尔滨 北纬45.44 东经126.36<br />黑龙江省 阿城 北纬45.32 东经126.58<br />黑龙江省 安达 北纬46.24 东经125.18<br />黑龙江省 北安 北纬48.15 东经126.31<br />黑龙江省 大庆 北纬46.36 东经125.01<br />黑龙江省 富锦 北纬47.15 东经132.02<br />黑龙江省 海林 北纬44.35 东经129.21<br />黑龙江省 海伦 北纬47.28 东经126.57<br />黑龙江省 鹤岗 北纬47.20 东经130.16<br />黑龙江省 黑河 北纬50.14 东经127.29<br />黑龙江省 佳木斯 北纬46.47 东经130.22<br />黑龙江省 鸡西 北纬45.17 东经130.57<br />黑龙江省 密山 北纬45.32 东经131.50<br />黑龙江省 牡丹江 北纬44.35 东经129.36<br />黑龙江省 讷河 北纬48.29 东经124.51<br />黑龙江省 宁安 北纬44.21 东经129.28<br />黑龙江省 齐齐哈尔 北纬47.20 东经123.57<br />黑龙江省 七台河 北纬45.48 东经130.49<br />黑龙江省 双城 北纬45.22 东经126.15<br />黑龙江省 尚志 北纬45.14 东经127.55<br />黑龙江省 双鸭山 北纬46.38 东经131.11<br />黑龙江省 绥芬河 北纬44.25 东经131.11<br />黑龙江省 绥化 北纬46.38 东经126.59<br />黑龙江省 铁力 北纬46.59 东经128.01<br />黑龙江省 同江 北纬47.39 东经132.30<br />黑龙江省 五常 北纬44.55 东经127.11<br />黑龙江省 五大连池 北纬48.38 东经126.07<br />黑龙江省 伊春 北纬47.42 东经128.56<br />黑龙江省 肇东 北纬46.04 东经125.58<br />湖北省 武汉 北纬30.35 东经114.17<br />湖北省 安陆 北纬31.15 东经113.41<br />湖北省 当阳 北纬30.50 东经111.47<br />湖北省 丹江口 北纬32.33 东经108.30<br />湖北省 大冶 北纬30.06 东经114.58<br />湖北省 恩施 北纬30.16 东经109.29<br />湖北省 鄂州 北纬30.23 东经114.52<br />湖北省 广水 北纬31.37 东经113.48<br />湖北省 洪湖 北纬29.48 东经113.27<br />湖北省 黄石 北纬30.12 东经115.06<br />湖北省 黄州 北纬30.27 东经114.52<br />湖北省 荆门 北纬31.02 东经112.12<br />湖北省 荆沙 北纬30.18 东经112.16<br />湖北省 老河口 北纬32.23 东经111.40<br />湖北省 利川 北纬30.18 东经108.56<br />湖北省 麻城 北纬31.10 东经115.01<br />湖北省 浦圻 北纬29.42 东经113.51<br />湖北省 潜江 北纬30.26 东经112.53<br />湖北省 石首 北纬29.43 东经112.24<br />湖北省 十堰 北纬32.40 东经110.47<br />湖北省 随州 北纬31.42 东经113.22<br />湖北省 天门 北纬60.39 东经113.10<br />湖北省 武穴 北纬29.51 东经115.33<br />湖北省 襄樊 北纬32.02 东经112.08<br />湖北省 咸宁 北纬29.53 东经114.17<br />湖北省 仙桃 北纬30.22 东经113.27<br />湖北省 孝感 北纬30.56 东经113.54<br />湖北省 宜昌 北纬30.42 东经111.17<br />湖北省 宜城 北纬31.42 东经112.15<br />湖北省 应城 北纬30.57 东经113.33<br />湖北省 枣阳 北纬32.07 东经112.44<br />湖北省 枝城 北纬30.23 东经111.27<br />湖北省 钟祥 北纬31.10 东经112.34<br />湖南省 长沙 北纬28.12 东经112.59<br />湖南省 常德 北纬29.02 东经111.51<br />湖南省 郴州 北纬25.46 东经113.02<br />湖南省 衡阳 北纬26.53 东经112.37<br />湖南省 洪江 北纬27.07 东经109.59<br />湖南省 怀化 北纬27.33 东经109.58<br />湖南省 津市 北纬29.38 东经111.52<br />湖南省 吉首 北纬28.18 东经109.43<br />湖南省 耒阳 北纬26.24 东经112.51<br />湖南省 冷水江 北纬27.42 东经111.26<br />湖南省 冷水滩 北纬26.26 东经111.35<br />湖南省 涟源 北纬27.41 东经111.41<br />湖南省 醴陵 北纬27.40 东经113.30<br />湖南省 临湘 北纬29.29 东经113.27<br />湖南省 浏阳 北纬28.09 东经113.37<br />湖南省 娄底 北纬27.44 东经111.59<br />湖南省 汨罗 北纬28.49 东经113.03<br />湖南省 韶山 北纬27.54 东经112.29<br />湖南省 邵阳 北纬27.14 东经111.28<br />湖南省 武冈 北纬26.43 东经110.37<br />湖南省 湘潭 北纬27.52 东经112.53<br />湖南省 湘乡 北纬27.44 东经112.31<br />湖南省 益阳 北纬28.36 东经112.20<br />湖南省 永州 北纬26.13 东经111.37<br />湖南省 沅江 北纬28.50 东经112.22<br />湖南省 岳阳 北纬29.22 东经113.06<br />湖南省 张家界 北纬29.08 东经110.29<br />湖南省 株洲 北纬27.51 东经113.09<br />湖南省 资兴 北纬25.58 东经113.13<br />吉林省 长春 北纬43.54 东经125.19<br />吉林省 白城 北纬45.38 东经122.50<br />吉林省 白山 北纬41.56 东经126.26<br />吉林省 大安 北纬45.30 东经124.18<br />吉林省 德惠 北纬44.32 东经125.42<br />吉林省 敦化 北纬43.22 东经128.13<br />吉林省 公主岭 北纬43.31 东经124.49<br />吉林省 和龙 北纬42.32 东经129.00<br />吉林省 桦甸 北纬42.58 东经126.44<br />吉林省 珲春 北纬42.52 东经130.22<br />吉林省 集安 北纬41.08 东经126.11<br />吉林省 蛟河 北纬43.42 东经127.21<br />吉林省 吉林 北纬43.52 东经126.33<br />吉林省 九台 北纬44.09 东经125.51<br />吉林省 辽源 北纬42.54 东经125.09<br />吉林省 临江 北纬41.49 东经126.53<br />吉林省 龙井 北纬42.46 东经129.26<br />吉林省 梅河口 北纬42.32 东经125.40<br />吉林省 舒兰 北纬44.24 东经126.57<br />吉林省 四平 北纬43.10 东经124.22<br />吉林省 松原 北纬45.11 东经124.49<br />吉林省 洮南 北纬45.20 东经122.47<br />吉林省 通化 北纬41.43 东经125.56<br />吉林省 图们 北纬42.57 东经129.51<br />吉林省 延吉 北纬42.54 东经129.30<br />吉林省 愉树 北纬44.49 东经126.32<br />江苏省 南京 北纬32.03 东经118.46<br />江苏省 常熟 北纬31.39 东经120.43<br />江苏省 常州 北纬31.47 东经119.58<br />江苏省 丹阳 北纬32.00 东经119.32<br />江苏省 东台 北纬32.51 东经120.19<br />江苏省 高邮 北纬32.47 东经119.27<br />江苏省 海门 北纬31.53 东经121.09<br />江苏省 淮安 北纬33.30 东经119.09<br />江苏省 淮阴 北纬33.36 东经119.02<br />江苏省 江都 北纬32.26 东经119.32<br />江苏省 姜堰 北纬32.34 东经120.08<br />江苏省 江阴 北纬31.54 东经120.17<br />江苏省 靖江 北纬32.02 东经120.17<br />江苏省 金坛 北纬31.46 东经119.33<br />江苏省 昆山 北纬31.23 东经120.57<br />江苏省 连去港 北纬34.36 东经119.10<br />江苏省 溧阳 北纬31.26 东经119.29<br />江苏省 南通 北纬32.01 东经120.51<br />江苏省 邳州 北纬34.19 东经117.59<br />江苏省 启乐 北纬31.48 东经121.39<br />江苏省 如皋 北纬32.23 东经120.33<br />江苏省 宿迁 北纬33.58 东经118.18<br />江苏省 苏州 北纬31.19 东经120.37<br />江苏省 太仓 北纬31.27 东经121.06<br />江苏省 泰兴 北纬32.10 东经120.01<br />江苏省 泰州 北纬32.30 东经119.54<br />江苏省 通州 北纬32.05 东经121.03<br />江苏省 吴江 北纬31.10 东经120.39<br />江苏省 无锡 北纬31.34 东经120.18<br />江苏省 兴化 北纬32.56 东经119.50<br />江苏省 新沂 北纬34.22 东经118.20<br />江苏省 徐州 北纬34.15 东经117.11<br />江苏省 盐在 北纬33.22 东经120.08<br />江苏省 扬中 北纬32.14 东经119.49<br />江苏省 扬州 北纬32.23 东经119.26<br />江苏省 宜兴 北纬31.21 东经119.49<br />江苏省 仪征 北纬32.16 东经119.10<br />江苏省 张家港 北纬31.52 东经120.32<br />江苏省 镇江 北纬32.11 东经119.27<br />江西省 南昌 北纬28.40 东经115.55<br />江西省 德兴 北纬28.57 东经117.35<br />江西省 丰城 北纬28.12 东经115.48<br />江西省 赣州 北纬28.52 东经114.56<br />江西省 高安 北纬28.25 东经115.22<br />江西省 吉安 北纬27.07 东经114.58<br />江西省 景德镇 北纬29.17 东经117.13<br />江西省 井冈山 北纬26.34 东经114.10<br />江西省 九江 北纬29.43 东经115.58<br />江西省 乐平 北纬28.58 东经117.08<br />江西省 临川 北纬27.59 东经116.21<br />江西省 萍乡 北纬27.37 东经113.50<br />江西省 瑞昌 北纬29.40 东经115.38<br />江西省 瑞金 北纬25.53 东经116.01<br />江西省 上饶 北纬25.27 东经117.58<br />江西省 新余 北纬27.48 东经114.56<br />江西省 宜春 北纬27.47 东经114.23<br />江西省 鹰潭 北纬28.14 东经117.03<br />江西省 樟树 北纬28.03 东经115.32<br />辽宁省 沈阳 北纬41.48 东经123.25<br />辽宁省 鞍山 北纬41.07 东经123.00<br />辽宁省 北票 北纬41.48 东经120.47<br />辽宁省 本溪 北纬41.18 东经123.46<br />辽宁省 朝阳 北纬41.34 东经120.27<br />辽宁省 大连 北纬38.55 东经121.36<br />辽宁省 丹东 北纬40.08 东经124.22<br />辽宁省 大石桥 北纬40.37 东经122.31<br />辽宁省 东港 北纬39.53 东经124.08<br />辽宁省 凤城 北纬40.28 东经124.02<br />辽宁省 抚顺 北纬41.51 东经123.54<br />辽宁省 阜新 北纬42.01 东经121.39<br />辽宁省 盖州 北纬40.24 东经122.21<br />辽宁省 海城 北纬40.51 东经122.43<br />辽宁省 葫芦岛 北纬40.45 东经120.51<br />辽宁省 锦州 北纬41.07 东经121.09<br />辽宁省 开原 北纬42.32 东经124.02<br />辽宁省 辽阳 北纬41.16 东经123.12<br />辽宁省 凌海 北纬41.10 东经121.21<br />辽宁省 凌源 北纬41.14 东经119.22<br />辽宁省 盘锦 北纬41.07 东经122.03<br />辽宁省 普兰店 北纬39.23 东经121.58<br />辽宁省 铁法 北纬42.28 东经123.32<br />辽宁省 铁岭 北纬42.18 东经123.51<br />辽宁省 瓦房店 北纬39.37 东经122.00<br />辽宁省 兴城 北纬40.37 东经120.41<br />辽宁省 新民 北纬41.59 东经122.49<br />辽宁省 营口 北纬40.39 东经122.13<br />辽宁省 庄河 北纬39.41 东经122.58<br />内自治区 呼和浩特 北纬40.48 东经111.41<br />内自治区 包头 北纬40.39 东经109.49<br />内自治区 赤峰 北纬42.17 东经118.58<br />内自治区 东胜 北纬39.48 东经109.59<br />内自治区 二连浩特 北纬43.38 东经111.58<br />内自治区 额尔古纳 北纬50.13 东经120.11<br />内自治区 丰镇 北纬40.27 东经113.09<br />内自治区 根河 北纬50.48 东经121.29<br />内自治区 海拉尔 北纬49.12 东经119.39<br />内自治区 霍林郭勒 北纬45.32 东经119.38<br />内自治区 集宁 北纬41.02 东经113.06<br />内自治区 临河 北纬40.46 东经107.22<br />内自治区 满洲里 北纬49.35 东经117.23<br />内自治区 通辽 北纬43.37 东经122.16<br />内自治区 乌兰浩特 北纬46.03 东经122.03<br />内自治区 乌海 北纬39.40 东经106.48<br />内自治区 锡林浩特 北纬43.57 东经116.03<br />内自治区 牙克石 北纬49.17 东经120.40<br />内自治区 扎兰屯 北纬48.00 东经122.47<br />宁夏自治区 银川 北纬38.27 东经106.16<br />宁夏自治区 青铜峡 北纬37.56 东经105.59<br />宁夏自治区 石嘴山 北纬39.02 东经106.22<br />宁夏自治区 吴忠 北纬37.59 东经106.11<br />青海省 西宁 北纬36.38 东经101.48<br />青海省 德令哈 北纬37.22 东经97.23<br />青海省 格尔木 北纬36.26 东经94.55<br />山东省 济南 北纬36.40 东经117.00<br />山东省 安丘 北纬36.25 东经119.12<br />山东省 滨州 北纬37.22 东经118.02<br />山东省 昌邑 北纬39.52 东经119.24<br />山东省 德州 北纬37.26 东经116.17<br />山东省 东营 北纬37.27 东经118.30<br />山东省 肥城 北纬36.14 东经116.46<br />山东省 高密 北纬36.22 东经119.44<br />山东省 菏泽 北纬35.14 东经115.26<br />山东省 胶南 北纬35.53 东经119.58<br />山东省 胶州 北纬36.17 东经120.00<br />山东省 即墨 北纬36.22 东经120.28<br />山东省 济宁 北纬35.23 东经116.33<br />山东省 莱芜 北纬36.12 东经117.40<br />山东省 莱西 北纬36.52 东经120.31<br />山东省 莱阳 北纬36.58 东经120.42<br />山东省 莱州 北纬37.10 东经119.57<br />山东省 乐陵 北纬37.44 东经117.12<br />山东省 聊城 北纬36.26 东经115.57<br />山东省 临清 北纬36.51 东经115.42<br />山东省 临沂 北纬35.03 东经118.20<br />山东省 龙口 北纬37.39 东经120.21<br />山东省 蓬莱 北纬37.48 东经120.45<br />山东省 平度 北纬36.47 东经119.58<br />山东省 青岛 北纬36.03 东经120.18<br />山东省 青州 北纬36.42 东经118.28<br />山东省 曲阜 北纬35.36 东经116.58<br />山东省 日照 北纬35.23 东经119.32<br />山东省 荣成 北纬37.10 东经122.25<br />山东省 乳山 北纬36.54 东经121.31<br />山东省 寿光 北纬36.53 东经118.44<br />山东省 泰安 北纬36.11 东经117.08<br />山东省 滕州 北纬35.06 东经117.09<br />山东省 潍坊 北纬36.43 东经119.06<br />山东省 威海 北纬37.31 东经122.07<br />山东省 文登 北纬37.12 东经122.03<br />山东省 新泰 北纬35.54 东经117.45<br />山东省 烟台 北纬37.32 东经121.24<br />山东省 兖州 北纬35.32 东经116.49<br />山东省 禹城 北纬36.56 东经116.39<br />山东省 枣庄 北纬34.52 东经117.33<br />山东省 章丘 北纬36.43 东经117.32<br />山东省 招远 北纬37.21 东经120.23<br />山东省 诸城 北纬35.59 东经119.24<br />山东省 淄博 北纬36.48 东经118.03<br />山东省 邹城 北纬35.24 东经116.58<br />山西省 太原 北纬37.54 东经112.33<br />山西省 长治 北纬36.11 东经113.06<br />山西省 大同 北纬40.06 东经113.17<br />山西省 高平 北纬35.48 东经112.55<br />山西省 古交 北纬37.54 东经112.09<br />山西省 河津 北纬35.35 东经110.41<br />山西省 侯马 北纬35.37 东经111.21<br />山西省 霍州 北纬36.34 东经111.42<br />山西省 介休 北纬37.02 东经111.55<br />山西省 晋城 北纬35.30 东经112.51<br />山西省 临汾 北纬36.05 东经111.31<br />山西省 潞城 北纬36.21 东经113.14<br />山西省 朔州 北纬39.19 东经112.26<br />山西省 孝义 北纬37.08 东经111.48<br />山西省 忻州 北纬38.24 东经112.43<br />山西省 阳泉 北纬37.51 东经113.34<br />山西省 永济 北纬34.52 东经110.27<br />山西省 原平 北纬38.43 东经112.42<br />山西省 榆次 北纬37.41 东经112.43<br />山西省 运城 北纬35.02 东经110.59<br />陕西省 西安 北纬34.17 东经108.57<br />陕西省 安康 北纬32.41 东经109.01<br />陕西省 宝鸡 北纬34.22 东经107.09<br />陕西省 韩城 北纬35.28 东经110.27<br />陕西省 汉中 北纬33.04 东经107.01<br />陕西省 华阴 北纬34.34 东经110.05<br />陕西省 商州 北纬33.52 东经109.57<br />陕西省 铜川 北纬35.06 东经109.07<br />陕西省 渭南 北纬34.30 东经109.30<br />陕西省 咸阳 北纬34.20 东经108.43<br />陕西省 兴平 北纬34.18 东经108.29<br />陕西省 延安 北纬36.35 东经109.28<br />陕西省 榆林 北纬38.18 东经109.47<br />上海市 上海市 北纬31.14 东经121.29<br />四川省 成都 北纬30.40 东经104.04<br />四川省 巴中 北纬31.51 东经106.43<br />四川省 崇州 北纬30.39 东经103.40<br />四川省 达川 北纬31.14 东经107.29<br />四川省 德阳 北纬31.09 东经104.22<br />四川省 都江堰 北纬31.01 东经103.37<br />四川省 峨眉山 北纬29.36 东经103.29<br />四川省 涪陵 北纬29.42 东经107.22<br />四川省 广汉 北纬30.58 东经104.15<br />四川省 广元 北纬32.28 东经105.51<br />四川省 华蓥 北纬30.26 东经106.44<br />四川省 简阳 北纬30.24 东经104.32<br />四川省 江油 北纬31.48 东经104.42<br />四川省 阆中 北纬31.36 东经105.58<br />四川省 乐山 北纬29.36 东经103.44<br />四川省 泸州 北纬28.54 东经105.24<br />四川省 绵阳 北纬31.30 东经104.42<br />四川省 南充 北纬30.49 东经106.04<br />四川省 内江 北纬29.36 东经105.02<br />四川省 攀枝花 北纬26.34 东经101.43<br />四川省 彭州 北纬30.59 东经103.57<br />四川省 邛崃 北纬30.26 东经103.28<br />四川省 遂宁 北纬30.31 东经105.33<br />四川省 万县 北纬30.50 东经108.21<br />四川省 万源 北纬32.03 东经108.03<br />四川省 西昌 北纬27.54 东经102.16<br />四川省 雅安 北纬29.59 东经102.59<br />四川省 宜宾 北纬28.47 东经104.34<br />四川省 自贡 北纬29.23 东经104.46<br />四川省 资阳 北纬30.09 东经104.38<br />台湾省 台北市 北纬25.03 东经121.30<br />天津市 天津市 北纬39.02 东经117.12<br />西藏自治区 拉萨 北纬29.39 东经91.08<br />西藏自治区 日喀则 北纬29.16 东经88.51<br />香港 香港市 北纬21.23 东经115.12<br />新疆自治区 乌鲁木齐 北纬43.45 东经87.36<br />新疆自治区 阿克苏 北纬41.09 东经80.19<br />新疆自治区 阿勒泰 北纬47.50 东经88.12<br />新疆自治区 阿图什 北纬39.42 东经76.08<br />新疆自治区 博乐 北纬44.57 东经82.08<br />新疆自治区 昌吉 北纬44.02 东经87.18<br />新疆自治区 阜康 北纬44.09 东经87.58<br />新疆自治区 哈密 北纬42.50 东经93.28<br />新疆自治区 和田 北纬37.09 东经79.55<br />新疆自治区 克拉玛依 北纬45.36 东经84.51<br />新疆自治区 喀什 北纬39.30 东经75.59<br />新疆自治区 库尔勒 北纬41.46 东经86.07<br />新疆自治区 奎屯 北纬44.27 东经84.56<br />新疆自治区 石河子 北纬44.18 东经86.00<br />新疆自治区 塔城 北纬46.46 东经82.59<br />新疆自治区 吐鲁番 北纬42.54 东经89.11<br />新疆自治区 伊宁 北纬43.55 东经81.20<br />云南省 昆明 北纬25.04 东经102.42<br />云南省 保山 北纬25.08 东经99.10<br />云南省 楚雄 北纬25.01 东经101.32<br />云南省 大理 北纬25.34 东经100.13<br />云南省 东川 北纬26.06 东经103.12<br />云南省 个旧 北纬23.21 东经103.09<br />云南省 景洪 北纬22.01 东经100.48<br />云南省 开远 北纬23.43 东经103.13<br />云南省 曲靖 北纬25.30 东经103.48<br />云南省 瑞丽 北纬24.00 东经97.50<br />云南省 思茅 北纬22.48 东经100.58<br />云南省 畹町 北纬24.06 东经98.04<br />云南省 宣威 北纬26.13 东经104.06<br />云南省 玉溪 北纬24.22 东经102.32<br />云南省 昭通 北纬27.20 东经103.42<br />浙江省 杭州 北纬30.16 东经120.10<br />浙江省 慈溪 北纬30.11 东经121.15<br />浙江省 东阳 北纬29.16 东经120.14<br />浙江省 奉化 北纬29.39 东经121.24<br />浙江省 富阳 北纬30.03 东经119.57<br />浙江省 海宁 北纬30.32 东经120.42<br />浙江省 湖州 北纬30.52 东经120.06<br />浙江省 建德 北纬29.29 东经119.16<br />浙江省 江山 北纬28.45 东经118.37<br />浙江省 嘉兴 北纬30.46 东经120.45<br />浙江省 金华 北纬29.07 东经119.39<br />浙江省 兰溪 北纬29.12 东经119.28<br />浙江省 临海 北纬28.51 东经121.08<br />浙江省 丽水 北纬28.27 东经119.54<br />浙江省 龙泉 北纬28.04 东经119.08<br />浙江省 宁波 北纬29.52 东经121.33<br />浙江省 平湖 北纬30.42 东经121.01<br />浙江省 衢州 北纬28.58 东经118.52<br />浙江省 瑞安 北纬27.48 东经120.38<br />浙江省 上虞 北纬30.01 东经120.52<br />浙江省 绍兴 北纬30.00 东经120.34<br />浙江省 台州 北纬28.41 东经121.27<br />浙江省 桐乡 北纬30.38 东经120.32<br />浙江省 温岭 北纬28.22 东经121.21<br />浙江省 温州 北纬28.01 东经120.39<br />浙江省 萧山 北纬30.09 东经120.16<br />浙江省 义乌 北纬29.18 东经120.04<br />浙江省 乐清 北纬28.08 东经120.58<br />浙江省 余杭 北纬30.26 东经120.18<br />浙江省 余姚 北纬30.02 东经121.10<br />浙江省 永康 北纬29.54 东经120.01<br />浙江省 舟山 北纬30.01 东经122.06<br />浙江省 诸暨 北纬29.43 东经120.14<br />重庆市 重庆市 北纬29.35 东经106.33<br />重庆市 合川市 北纬30.02 东经106.15<br />重庆市 江津市 北纬29.18 东经106.16<br />重庆市 南川市 北纬29.10 东经107.05<br />重庆市 永川市 北纬29.23 东经105.53&nbsp;</span></p>来源：http://hi.baidu.com/feelixus/blog/item/201e2e7fd9f12d0e29388ac9.html]]></description><category>地图(Maps)</category><comments>http://camnpr.com/map/468.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=468</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=468&amp;key=32c8f058</trackback:ping></item><item><title>根据地球上任意两点的经纬度计算两点间的距离</title><author>camnpr@163.com (camnpr)</author><link>http://camnpr.com/map/467.html</link><pubDate>Wed, 26 Oct 2011 13:53:54 +0800</pubDate><guid>http://camnpr.com/map/467.html</guid><description><![CDATA[<p>地球是一个近乎标准的椭球体，它的赤道半径为6378.140千米，极半径为6356.755千米，平均半径6371.004千米。如果我们假设地球是一个完美的球体，那么它的半径就是地球的平均半径，记为R。如果以0度经线为基准，那么根据地球表面任意两点的经纬度就可以计算出这两点间的地表距离（这里忽略地球表面地形对计算带来的误差，仅仅是理论上的估算值）。设第一点A的经纬度为(LonA, LatA)，第二点B的经纬度为(LonB, LatB)，按照0度经线的基准，东经取经度的正值(Longitude)，西经取经度负值(-Longitude)，北纬取90-纬度值(90-Latitude)，南纬取90+纬度值(90+Latitude)，则经过上述处理过后的两点被计为(MLonA, MLatA)和(MLonB, MLatB)。那么根据三角推导，可以得到计算两点距离的如下公式：<br /><br/><br /><br/>C = sin(MLatA)*sin(MLatB)*cos(MLonA-MLonB) + cos(MLatA)*cos(MLatB)<br /><br/><br /><br/>Distance = R*Arccos(C)*Pi/180<br /><br/><br /><br/>这里，R和Distance单位是相同，如果是采用6371.004千米作为半径，那么Distance就是千米为单位，如果要使用其他单位，比如mile，还需要做单位换算，1千米=0.621371192mile<br /><br/>如果仅对经度作正负的处理，而不对纬度作90-Latitude(假设都是北半球，南半球只有澳洲具有应用意义)的处理，那么公式将是：<br /><br/><br /><br/><br /><br/>C = sin(LatA)*sin(LatB) + cos(LatA)*cos(LatB)*cos(MLonA-MLonB)<br /><br/><br /><br/>Distance = R*Arccos(C)*Pi/180<br /><br/><br /><br/>以上通过简单的三角变换就可以推出。<br /><br/>如果三角函数的输入和输出都采用弧度值，那么公式还可以写作：<br /><br/><br /><br/>C = sin(LatA*Pi/180)*sin(LatB*Pi/180) + cos(LatA*Pi/180)*cos(LatB*Pi/180)*cos((MLonA-MLonB)*Pi/180)<br /><br/><br /><br/>Distance = R*Arccos(C)*Pi/180<br /><br/><br /><br/>也就是：<br /><br/><br /><br/>C = sin(LatA/57.2958)*sin(LatB/57.2958) + cos(LatA/57.2958)*cos(LatB/57.2958)*cos((MLonA-MLonB)/57.2958)<br /><br/><br /><br/>Distance = R*Arccos(C) = 6371.004*Arccos(C) kilometer = 0.621371192*6371.004*Arccos(C) mile = 3958.758349716768*Arccos(C) mile<br /><br/><br /><br/>在实际应用当中，一般是通过一个个体的邮政编码来查找该邮政编码对应的地区中心的经纬度，然后再根据这些经纬度来计算彼此的距离，从而估算出某些群体之间的大致距离范围(比如酒店旅客的分布范围-各个旅客的邮政编码对应的经纬度和酒店的经纬度所计算的距离范围-等等)，所以，通过邮政编码查询经纬度这样一个数据库是一个很有用的资源。</p><p>&nbsp;</p><div class="tit">根据经纬度计算该位置点与附近某一经纬度位置点的位置偏移角</div><div class="date">2008-05-18 13:44</div><table>    <tbody>        <tr>            <td>            <div>如何计算？<br /><br/>            <br /><br/>            设某一城市有一个城市地标，可以视为城市的中心点 ，其经纬度已知。<br /><br/>            <br /><br/>            分散在城市中心分别<br /><br/>            &nbsp;&nbsp; （1）由多层环形交通公路（环线），环城市地标为基准，在不同层的环线上分布着重要的设施。<br /><br/>            &nbsp;&nbsp;&nbsp; （2）分布着多个卫星城、主要居民区和学校、基础设施。<br /><br/>            <br /><br/>            现控制无人机分别自城市地标出发，依次探访和航拍环城公路上的重要设施。<br /><br/>            <br /><br/>            无人机配置有GPS导航和电子罗盘。<br /><br/>            <br /><br/>            自城市中心地标处控制无人机起飞。<br /><br/>            <br /><br/>            1 计算任意经纬度点间的距离&nbsp;<br /><br/>            <br /><br/>            用GPS测出两个点的经纬度后，如何计算这两个点之间的距离呢。用的是便携式GPS，只有经纬度显示，无坐标显示和输出。&nbsp;<br /><br/>            <br /><br/>            <br /><br/>            设两点A、B的经、纬度分别为(jA,wA)(jB,wB)，则半径为R的球面上两点间的最短距离(大圆弧)为：&nbsp;<br /><br/>            弧AB=R*arccos[sin(wA)sin(wB)+cos(wA)cos(wB)*cos(jA-jB)]&nbsp;<br /><br/>            <br /><br/>            <div><img alt="" src="{$->>repath}articles/common/upload/2011/10/26/135041t0.jpg" /></div>            <br /><br/>            <div>            <p>google maps的脚本里代码。<br /><br/>            <br /><br/>            private const double EARTH_RADIUS = 6378.137;<br /><br/>            private static double rad(double d)<br /><br/>            {<br /><br/>            &nbsp;&nbsp;&nbsp; return d * Math.PI / 180.0;<br /><br/>            }</p>            <p>public static double GetDistance(double lat1, double lng1, double lat2, double lng2)<br /><br/>            {<br /><br/>            &nbsp;&nbsp;&nbsp; double radLat1 = rad(lat1);<br /><br/>            &nbsp;&nbsp;&nbsp; double radLat2 = rad(lat2);<br /><br/>            &nbsp;&nbsp;&nbsp; double a = radLat1 - radLat2;<br /><br/>            &nbsp;&nbsp;&nbsp; double b = rad(lng1) - rad(lng2);<br /><br/>            &nbsp;&nbsp;&nbsp; double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a/2),2) +&nbsp;<br /><br/>            &nbsp;&nbsp;&nbsp;&nbsp; Math.Cos(radLat1)*Math.Cos(radLat2)*Math.Pow(Math.Sin(b/2),2)));<br /><br/>            &nbsp;&nbsp;&nbsp; s = s * EARTH_RADIUS;<br /><br/>            &nbsp;&nbsp;&nbsp; s = Math.Round(s * 10000) / 10000;<br /><br/>            &nbsp;&nbsp;&nbsp; return s;<br /><br/>            }</p>            </div>            <br /><br/>            <p>;该函数用IDL语言编写，利用ＧＩＳ中根据两点经纬度计算距离公式</p>            <p>;计算经纬度两点间的距离<br /><br/>            Function Length2LatLon,pts0,pts1<br /><br/>            &nbsp;&nbsp;&nbsp; radius=6378.14d;地球平均半径,单位公里<br /><br/>            ;&nbsp;&nbsp;&nbsp; print,pts0,pts1</p>            <p>;&nbsp;&nbsp;&nbsp; length=radius * acos(sin(pts0[1]*!PI/180.0)*sin(pts1[1]*!PI/180.0)+cos(pts0[1]*!PI/180.0)*cos(pts1[1]*!PI/180.0)*cos(pts0[0]*!PI/180.0-pts1[0]*!PI/180.0))<br /><br/>            &nbsp;&nbsp;&nbsp; length=radius * acos(sin(pts0[1]*!DTOR)*sin(pts1[1]*!DTOR)+cos(pts0[1]*!DTOR)*cos(pts1[1]*!DTOR)*cos(pts0[0]*!DTOR-pts1[0]*!DTOR))<br /><br/>            &nbsp;&nbsp;&nbsp; return,length<br /><br/>            end<br /><br/>            pro test<br /><br/>            pts0=[117.548802d,38.625238d]<br /><br/>            pts1=[117.548625d,38.625139d]<br /><br/>            print,length2latlon(pts0,pts1)</p>            <p><br /><br/>            end</p>            <p>&nbsp;</p>            <p>另外在IDL中提供了计算两点距离的方法map_2points可以方便的计算不同单位（Miles，Meters）的距离，还可以通过设置不同的参数来得到不同的距离、角度值，</p>            <p>Syntax：<br /><br/>            Result = MAP_2POINTS( lon0, lat0, lon1, lat1 [, DPATH=value | , /METERS | , /MILES | , NPATH=integer{2 or greater} | , /PARAMETERS | , RADIANS=value] [, /RADIUS] [, /RHUMB] )</p>            具体可以参考IDL 的Help里面讲解<br /><br/>            <br /><br/>            <p>如果要算的距离是椭球面的距离，就难些。</p>            <p>因为大地线的方程是一个微分方程,所以大地线长度是对一个微分方程的开方的积分,无法写成简单的公式.通常是直接用差分代替微分,用求和代替积分算出,这是很严格的.</p>            <p>下面是近似地由大地经纬度求椭球面距离的逼近方法：</p>            <p>如两点在同一纬线上，距离为N*cos(phi)*（lambda2-lambda1）。</p>            <p>如两点在同一经线上，距离为M*dphi从phi1到phi2的积分。</p>            <p>其中N=a/sqrt(d), d=1-e*e*sin(phi)*sin(phi)，</p>            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M=a*(1-e*e)/[d*sqrt(d)]，</p>            <p>其中长短轴a,b与扁率偏心率的关系是:a/b=1-f=sqrt(1-e*e).</p>            <p>把积分区域分成等分n小段,积分可以写成求和，既可算出。这也是严格的。</p>            如两点不在同一经纬线上，且两点距离很近，则小区域的椭球面可以视为平面，于是两点的距离近似地是上面算出的距离的平方和的开方。如两点距离较远，把两点间的经纬差分成等分n小段，每小段的距离的和就是所求的距离。<br /><br/>            <br /><br/>            <table cellspacing="4" cellpadding="5" border="0">                <tbody>                    <tr>                        <td>                        <h3>地图基础知识&nbsp;http://www.51ditu.com</h3>                        <ul>                            <li>地图应用接口中使用的经纬度单位是NTU，您需要把其它单位的经纬度值转化过来，以下为常用的转换关系：</li>                        </ul>                        <table cellspacing="1" cellpadding="0">                            <tbody>                                <tr>                                    <td>                                    <p>基本转换：<br /><br/>                                    NTU = 度*100000<br /><br/>                                    度 = NTU/100000<br /><br/>                                    例如：<br /><br/>                                    经度 = 116.21345&deg;<br /><br/>                                    纬度 = 39.445875&deg;<br /><br/>                                    NTU经度：116.21345 * 100000 = 11621345（NTU）<br /><br/>                                    NTU纬度：39.445874*100000=3944587(NTU)<br /><br/>                                    <br /><br/>                                    度分转换：<br /><br/>                                    将度分单位数据转换为度单位数据<br /><br/>                                    度=度+分/60<br /><br/>                                    例如：<br /><br/>                                    经度 = 116&deg;20.12&rsquo;<br /><br/>                                    纬度 = 39&deg;12.34&rsquo;<br /><br/>                                    经度 = 116 + 20.12 / 60 = 116.33533&deg;<br /><br/>                                    纬度 = 39 + 12.34 / 60 = 39.20567&deg;<br /><br/>                                    NTU经度 = 116.33533 * 100000 = 11633533（NTU）<br /><br/>                                    NTU纬度 = 39.20567 * 100000 = 3920567（NTU）<br /><br/>                                    <br /><br/>                                    度分秒转换：<br /><br/>                                    将度分秒单位数据转换为度单位数据<br /><br/>                                    度 = 度 + 分 / 60 + 秒 / 60 / 60<br /><br/>                                    例如：<br /><br/>                                    经度 = 116&deg;20&rsquo;43&rdquo;<br /><br/>                                    纬度 = 39&deg;12&rsquo;37&rdquo;<br /><br/>                                    经度 = 116 + 20 / 60 + 43 / 60 / 60 = 116.34528&deg;<br /><br/>                                    纬度 = 39 + 12 / 60 + 37 / 60 / 60 = 39.21028&deg;<br /><br/>                                    NTU经度 = 116.34528 * 100000 = 11634528（NTU）<br /><br/>                                    NTU纬度 = 39.21028 * 100000 = 3921028（NTU）<br /><br/>                                    其格式的经纬值先转换度，再采用上面的运算。</p>                                    </td>                                </tr>                            </tbody>                        </table>                        <h4>与经纬度有关的基础知识：</h4>                        NTU 相当于十万分之一度。<br /><br/>                        <br /><br/>                        如何计算经度方向距离<br /><br/>                        <br /><br/>                        比如: 点A的纬度为3995400，点B的纬度为3995300，则这两个点在沿着纬线的方向相差100米。<br /><br/>                        点A的经度为11695400，点B的经度为11695300，则这两个点在沿着经线的方向相差大约为77米,&nbsp;<br /><br/>                        该值的计算方法可以用近似公式：<br /><br/>                        经度方向距离 = 经度差 * cos(纬度值) = 100 * cos(39) = 77米。<br/>                        <p>如何计算两点间距离<br /><br/>                        <br /><br/>                        比如：点A的经度为11695400，纬度为3995400。点B的经度为11695300，纬度为3995300。<br /><br/>                        公式:两点间距离 = [ (A点经度 - B点经度)^2 + (A点纬度 - B点纬度)^2 ] ^ (1/2) = [ (11695400 - 11695300)^2<br /><br/>                        + (3995400 - 3995300)^2 ] ^(1/2) =(10000+10000) ^ (1/2) =141米<br /><br/>                        <br /><br/>                        公式说明:加法 + ，减法 - ，乘法 *，除法 /，幂运算 ^(1/2)表示平方根 ^2表示平方。</p>                        <div>适用范围：未加密经纬度/加密经纬度</div>                        <p>&nbsp;</p>                        </td>                    </tr>                    <tr>                        <td>                        <p>&nbsp;</p>                        <p>&nbsp;</p>                        <p>使用的比例级别总共有0-12级共13个级别，他们和实际的比例尺的对应关系分别是：</p>                        <p>0级 -------------------- 1:5 000<br /><br/>                        1级 -------------------- 1:10 000<br /><br/>                        2级 -------------------- 1:20 000<br /><br/>                        3级 -------------------- 1:40 000<br /><br/>                        4级 -------------------- 1:80 000<br /><br/>                        5级 -------------------- 1:160 000<br /><br/>                        6级 -------------------- 1:320 000<br /><br/>                        7级 -------------------- 1:640 000<br /><br/>                        8级 -------------------- 1:1 280 000<br /><br/>                        9级 -------------------- 1:2 560 000<br /><br/>                        10级 ------------------- 1:5 120 000<br /><br/>                        11级 ------------------- 1:10 240 000<br /><br/>                        12级 ------------------- 1:20 480 000<br /><br/>                        13级 ------------------- 1:40 960 000<br /><br/>                        14级 ------------------- 1:81 920 000</p>                        <p>简单的说，0级地图最详细，12级地图最简单。</p>                        <p>&nbsp;</p>                        <h3>比例级别定义表</h3>                        </td>                    </tr>                    <tr>                        <td>                        <p>&nbsp;</p>                        <p>城市代码是某个城市的英文简称，标注在城市名称后面，便于用户记忆，点击查看城市代码表：</p>                        <h3>&nbsp;&nbsp;</h3>                        <h3>城市代码表</h3>                        </td>                    </tr>                </tbody>            </table>            <div>&nbsp;</div>            <div><img alt="" src="{$->>repath}articles/common/upload/2011/10/26/135136g3.jpg" /></div>            <p><br /><br/>            <img alt="" src="{$->>repath}articles/common/upload/2011/10/26/1352298r.jpg" /><br /><br/>            <br /><br/>            2 计算偏移角。</p>            <p>&nbsp;</p>            <p>完整的列子如下：</p>            <p>&nbsp;<br /><br/>            &lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>&quot;&gt;</p>            <p>&lt;html xmlns=&quot;<a href="http://www.w3.org/1999/xhtml">http://www.w3.org/1999/xhtml</a>&quot; &gt;<br /><br/>            &lt;head runat=&quot;server&quot;&gt;<br /><br/>            &nbsp;&nbsp;&nbsp; &lt;title&gt;无标题页&lt;/title&gt;<br /><br/>            &nbsp;&nbsp;&nbsp;&nbsp;<br /><br/>            &nbsp;&nbsp;&nbsp; &lt;script type=&quot;text/javascript&quot;&gt;<br /><br/>            &nbsp;&nbsp;&nbsp;&nbsp;<br /><br/>            &nbsp;&nbsp;&nbsp; function distanceByLnglat(lng1,lat1,lng2,lat2)<br /><br/>            {<br /><br/>            &nbsp;&nbsp;&nbsp; var radLat1 = Rad(lat1);<br /><br/>            &nbsp;&nbsp;&nbsp; var radLat2 = Rad(lat2);<br /><br/>            &nbsp;&nbsp;&nbsp; var a = radLat1 - radLat2;<br /><br/>            &nbsp;&nbsp;&nbsp; var b = Rad(lng1) - Rad(lng2);<br /><br/>            &nbsp;&nbsp;&nbsp; var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));<br /><br/>            &nbsp;&nbsp;&nbsp; s = s * 6378137.0;// 取WGS84标准参考椭球中的地球长半径(单位:m)<br /><br/>            &nbsp;&nbsp;&nbsp; s = Math.round(s * 10000) / 10000;<br /><br/>            <br /><br/>            <br /><br/>            alert(s);</p>            <p>&nbsp;&nbsp;&nbsp;&nbsp;<br /><br/>            // //下面为两点间空间距离（非球面体）<br /><br/>            // var value= Math.pow(Math.pow(lng1-lng2,2)+Math.pow(lat1-lat2,2),1/2);<br /><br/>            // alert(value);<br /><br/>            }</p>            <p>function Rad(d)<br /><br/>            {<br /><br/>            &nbsp;&nbsp;&nbsp; return d * Math.PI / 180.0;<br /><br/>            }</p>            <p><br /><br/>            &nbsp;&nbsp;&nbsp;&nbsp;<br /><br/>            &nbsp;&nbsp;&nbsp; &lt;/script&gt;<br /><br/>            &lt;/head&gt;<br /><br/>            &lt;body&gt;<br /><br/>            &nbsp;&nbsp;&nbsp; &lt;form id=&quot;form1&quot; runat=&quot;server&quot;&gt;<br /><br/>            &nbsp;&nbsp;&nbsp; &lt;div onclick =&quot;distanceByLnglat(116.95400,39.95400,116.95300,39.95300);&quot;&gt;<br /><br/>            &nbsp;&nbsp;&nbsp; test me<br /><br/>            &nbsp;&nbsp;&nbsp; &lt;/div&gt;<br /><br/>            &nbsp;&nbsp;&nbsp; &lt;/form&gt;<br /><br/>            &lt;/body&gt;<br /><br/>            &lt;/html&gt;</p>            </div>            </td>        </tr>    </tbody></table><p>来源：http://hi.baidu.com/liuliangzhou/blog/item/dcad4913326f2c045baf53e8.html <br /><br/>http://blog.chinaunix.net/u/6776/showart_694778.html</p>]]></description><category>地图(Maps)</category><comments>http://camnpr.com/map/467.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=467</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=467&amp;key=44f8fd26</trackback:ping></item><item><title>通过经纬度获取中心点,以及绑定的缩放级别</title><author>camnpr@163.com (camnpr)</author><link>http://camnpr.com/map/466.html</link><pubDate>Wed, 26 Oct 2011 13:47:27 +0800</pubDate><guid>http://camnpr.com/map/466.html</guid><description><![CDATA[<ol class="dp-j"><li><span><span class="comment">//根据经纬度的距离获取地图的缩放级</span><span>&nbsp;&nbsp;</span></span></li><li><span>function&nbsp;getRoom(diff){&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;room&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">new</span><span>&nbsp;Array(</span><span class="number">0</span><span>,&nbsp;&nbsp;</span><span class="number">1</span><span>,&nbsp;&nbsp;</span><span class="number">2</span><span>,&nbsp;</span><span class="number">3</span><span>,&nbsp;</span><span class="number">4</span><span>,&nbsp;</span><span class="number">5</span><span>,&nbsp;</span><span class="number">6</span><span>,</span><span class="number">7</span><span>,</span><span class="number">8</span><span>,&nbsp;&nbsp;</span><span class="number">9</span><span>,&nbsp;&nbsp;&nbsp;</span><span class="number">10</span><span>,&nbsp;&nbsp;</span><span class="number">11</span><span>,&nbsp;&nbsp;</span><span class="number">12</span><span>,&nbsp;&nbsp;</span><span class="number">13</span><span>,&nbsp;</span><span class="number">14</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;diffArr&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;Array(</span><span class="number">360</span><span>,</span><span class="number">180</span><span>,</span><span class="number">90</span><span>,</span><span class="number">45</span><span>,</span><span class="number">22</span><span>,</span><span class="number">11</span><span>,</span><span class="number">5</span><span>,</span><span class="number">2.5</span><span>,</span><span class="number">1.25</span><span>,</span><span class="number">0.6</span><span>,</span><span class="number">0.3</span><span>,</span><span class="number">0.15</span><span>,</span><span class="number">0.07</span><span>,</span><span class="number">0.03</span><span>,</span><span class="number">0</span><span>);&nbsp;&nbsp;</span></span></li><li><span><span>&nbsp;&nbsp; &nbsp;//</span></span><strong><span><span>等级room和diffArr的关系是：360/Math.Pow(2,room)=diffArr</span></span> </strong></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span><span>(var&nbsp;i&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;i&nbsp;&lt;&nbsp;diffArr.length;&nbsp;i&nbsp;++){&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>((diff&nbsp;-&nbsp;diffArr[i])&nbsp;&gt;=&nbsp;</span><span class="number">0</span><span>){&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;room[i];&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="number">14</span><span>;&nbsp;&nbsp;</span></span></li><li><span>}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>function&nbsp;getCenterPoint(maxJ,minJ,maxW,minW){<span class="comment">//通过经纬度获取中心位置和缩放级别</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(maxJ==minJ&amp;&amp;maxW==minW)</span><span class="keyword">return</span><span>&nbsp;[maxJ,maxW,</span><span class="number">0</span><span>];&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;diff&nbsp;=&nbsp;maxJ&nbsp;-&nbsp;minJ;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(diff&nbsp;&lt;&nbsp;(maxW&nbsp;-&nbsp;minW))diff&nbsp;=&nbsp;maxW&nbsp;-&nbsp;minW;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;diff&nbsp;=&nbsp;parseInt(<span class="number">10000</span><span>&nbsp;*&nbsp;diff)/</span><span class="number">10000</span><span>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;centerJ&nbsp;=&nbsp;minJ*<span class="number">1000000</span><span>+</span><span class="number">1000000</span><span>*(maxJ&nbsp;-&nbsp;minJ)/</span><span class="number">2</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;centerW&nbsp;=&nbsp;minW*<span class="number">1000000</span><span>+</span><span class="number">1000000</span><span>*(maxW&nbsp;-&nbsp;minW)/</span><span class="number">2</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;zoom&nbsp;=&nbsp;getRoom(diff);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;[centerJ/</span><span class="number">1000000</span><span>,centerW/</span><span class="number">1000000</span><span>,zoom];&nbsp;&nbsp;</span></span></li><li><span>} &nbsp;</span></li></ol><p>来源：http://lovebeyond.iteye.com/blog/900501</p>]]></description><category>地图(Maps)</category><comments>http://camnpr.com/map/466.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=466</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=466&amp;key=a4c7c728</trackback:ping></item><item><title>通过经纬度计算距离的公式</title><author>camnpr@163.com (camnpr)</author><link>http://camnpr.com/map/460.html</link><pubDate>Mon, 10 Oct 2011 20:50:49 +0800</pubDate><guid>http://camnpr.com/map/460.html</guid><description><![CDATA[<p>在去年cosbeta曾经发布了一个<a target="_blank" href="http://www.storyday.com/html/y2008/1803_conversion-and-a-point-of-latitude-and-longitude-calculated-from-the-gadget.html">网页计算工具</a>，这个作用就是根据地球上两点之间的经纬度计算两点之间的直线距离。经纬度到距离的计算在通信工程中应用比较广泛，所以cosbeta通过搜索找到了一个js的计算脚本（其实是google map的计算脚本，应该算是比较准确了），做成了<a target="_blank" href="http://www.storyday.com/wp-content/uploads/2008/09/latlung_dis.html">这个经纬度算距离的工具</a>。</p><p>今天有人给cosbeta发邮件，询问计算的公式是什么样的。其实，若是把地球当作一个正常的球体（其实它是椭球）来说，球面两点之间的距离计算并不复杂，运用球坐标很容易就能计算出两点之间的弧长。当然这都是高中的知识，我和你一样，也没有那个耐心来将其推导，所以我就利用google map的经纬度到距离计算的js脚本，将球面弧长的公式给还原出来（估计这个公式是经过部分修正的），还原出来的公式如下：<br /><br/><img alt="" src="{$->>repath}articles/common/upload/2011/10/10/2050202o.jpg" /></p><p>对上面的公式解释如下：</p><p>公式中经纬度均用弧度表示，角度到弧度的转化应该是很简单的了吧，若不会，依然请参考这个<a target="_blank" href="http://www.storyday.com/wp-content/uploads/2008/09/latlung_dis.html">这个经纬度算距离的工具</a>；</p><p>Lat1 Lung1 表示A点经纬度，Lat2 Lung2 表示B点经纬度；</p><p>a=Lat1 &ndash; Lat2 为两点纬度之差&nbsp; b=Lung1 -Lung2 为两点经度之差；</p><p>6378.137为地球半径，单位为公里；</p><p>计算出来的结果单位为公里；</p><p>哪位朋友若发现公式错误，请一定要留言指正哦！</p>来源：http://www.storyday.com/html/y2009/2212_according-to-latitude-and-longitude-distance-calculation-formula.html]]></description><category>地图(Maps)</category><comments>http://camnpr.com/map/460.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=460</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=460&amp;key=a688b0ed</trackback:ping></item><item><title>ArcGIS 9.3 下载(包含ArcGIS Desktop、ArcGIS Engine、ArcGI</title><author>camnpr@163.com (camnpr)</author><link>http://camnpr.com/map/395.html</link><pubDate>Tue, 02 Aug 2011 14:24:17 +0800</pubDate><guid>http://camnpr.com/map/395.html</guid><description><![CDATA[<p>2009-04-06 Update:</p><p>新增ArcGIS 9.3的电驴下载地址（都是windows版本的），具体的使用与设置或者版本问题请自行Google。<br /><span>希望下载完了的朋友能继续共享。</span></p><p>感谢三脚猫群友提供地址。</p><blockquote><br/><p>ArcGIS_Server_Java_Edition<br />ed2k://|file|ArcGIS_Server_Java_Edition.rar|1125815962|26CF7DF54987FD597754A67F0ADDF23E|h=SSF6PY4G6S74ZPDH5RPHLVPQ6VDKCZ6H|/</p></blockquote><br/><blockquote><br/><p>ArcGIS_Server_DotNet_Edition<br />ed2k://|file|ArcGIS_Server_DotNet_Edition.rar|1107488640|E2900FA27FE7E46250D8968D7535A165|h=D4QTQVV6BV32WNDTDPDFMO7455ANGDFW|/</p></blockquote><br/><blockquote><br/><p>ArcEngine SDK NET版本<br />ed2k://|file|EngineSDKNET.rar|311529080|20619FE326E99FC3B1D64C9556646110|h=JMR4PFH7UA6KQ6TSO45NTCMVR6OP2B6T|/</p></blockquote><br/><blockquote><br/><p>ArcEngine RunTime<br />ed2k://|file|EngineRT.rar|305586111|9C6940A6E6A54A9A521E7E2E22E420FD|h=XUR6XMNSG5TS2FIK4ZPQRBRG4Z5WBUNM|/</p></blockquote><br/><blockquote><br/><p>ArcSdeSqlServer<br />ed2k://|file|ArcSdeSqlServer.rar|98294990|07875C93992D0223ABE01FD08D121389|h=NQ232XG3EMC3W7UXQMWXKOUTNKLKMMZZ|/</p></blockquote><br/><blockquote><br/><p>ArcSdeOracle11g<br />ed2k://|file|ArcSdeOracle11g.rar|92156193|30E2F9A640856D98951E216448CE8129|h=MFKRPAHP4JEFNVIME4TLRLBEZ36H4CTL|/</p></blockquote><br/><blockquote><br/><p>ArcSdeOracle9i<br />ed2k://|file|ArcSdeOracle9i.rar|92154366|95B5238BFC5AA6108AC31C68F8F7A8FC|h=QWPNVF6SQ76B7R7UUDPZUZOMOOGHKS62|/</p></blockquote><br/><blockquote><br/><p>ArcSdeOracle10g<br />ed2k://|file|ArcSdeOracle10g.rar|92149937|B04E2223230F75EAD01ADC8CA8AAD10E|h=5L6356ORDNBXQAVRRB2DJUVSBAM2X5UI|/</p></blockquote><br/><blockquote><br/><p>ArcSdeSDK<br />ed2k://|file|ArcSdeSDK.rar|46926480|E741FDF07CE8DDBFB57B3AE3C13273CE|h=X7YV4AGB4G4M4VFBI2ELTLOQI47MQTTI|/</p></blockquote><br/><blockquote><br/><p>ArcIMS<br />ed2k://|file|ArcIMS.rar|538087394|C0FA77EA2ED42E5F1CC83C59B6579955|h=GER3OF25TQLT26ITTAYLDI6NBGG4DFOP|/</p></blockquote><br/><blockquote><br/><p>ArcIMS_Web_ADF_DotNet<br />ed2k://|file|ArcIMS_Web_ADF_DotNet.rar|426062755|D2CE63C9D2B8E10BE846D2D51CE9A2A9|h=4KEB5TNIN5ZONO3J5SX3NYKJXWUG3BL3|/</p></blockquote><br/><blockquote><br/><p>ArcIMS_Web_ADF_Java<br />ed2k://|file|ArcIMS_Web_ADF_Java.rar|561867917|857D85BB70A5087EB4733625B3C0B138|h=PJVO3FVWJXMCVFVLEGZRFXAKBISUY7SQ|/</p></blockquote><br/><p>ArcGIS Desktop 9.3 下载的种子(包含crack)，<a href="http://files.cnblogs.com/vgis/arcgis.9.3.slx.(desktop.only)dvd-3.5gb.rar" target="_blank"><span>点击下载。</span></a></p><p>ArcGIS Server 9.3 For .NET下载的种子，<a href="http://files.cnblogs.com/vgis/Arcgis_server_93_dotnet_edition.rar" target="_blank"><span>点击下载。</span></a></p><p>workstation 9.3下载的种子，<a href="http://files.cnblogs.com/vgis/ArcGIS_ArcInfo_9_3_Workstation_DVD.rar" target="_blank"><span>点击下载。</span></a>&nbsp;</p><p><span>以下的地址靠迅雷的吸血能力也许可以下载。通过【文件&mdash;&mdash;新建&mdash;&mdash;添加下载任务】。</span></p><p>ArcGIS Engine（AE、ArcEngine）9.3 SDK For .NET，下载地址：<span><a href="ftp://www.3snews.net/UpLoad/arcgis%209.3+EngineSDKNET.rar">ftp://www.3snews.net/UpLoad/arcgis%209.3+EngineSDKNET.rar</a></span></p><p>ArcGIS Engine（AE、ArcEngine）9.3 Runtime For　Windows，下载地址：<a href="ftp://www.3snews.net/UpLoad/ae9.3%20runtime%20+Windows.rar"><span>ftp://www.3snews.net/UpLoad/ae9.3%20runtime%20+Windows.rar</span></a></p><p>ArcSDE 9.3 For　Windows，下载地址：<a href="ftp://www.3snews.net/UpLoad/ArcSDE9.3%7Bwindows%7D.iso"><span>ftp://www.3snews.net/UpLoad/ArcSDE9.3%7Bwindows%7D.iso</span></a></p><p>ArcGIS 9.3 Desktop 下载地址：<a href="ftp://arcgis.lzu.edu.cn/ArcGIS%209.3/ArcGIS%20Desktop%209.3.iso"><span>ftp://arcgis.lzu.edu.cn/ArcGIS%209.3/ArcGIS%20Desktop%209.3.iso</span></a></p><p>附：ArcGIS Engine、ArcGIS Server、ArcSDE的许可文件ECP，<a href="http://files.cnblogs.com/vgis/ArcGIS9.3ECP.rar" target="_blank"><span>点击下载。</span></a></p><p><span>说明：以上资源来源于网络，仅供学习研究使用，请勿作其它用途！请支持正版。</span></p><p><span>转载请注明来自http://www.vising.net</span></p>]]></description><category>地图(Maps)</category><comments>http://camnpr.com/map/395.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=395</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=395&amp;key=530cffbf</trackback:ping></item><item><title>用 OpenLayers 集合数据</title><author>camnpr@163.com (camnpr)</author><link>http://camnpr.com/map/393.html</link><pubDate>Thu, 28 Jul 2011 16:12:30 +0800</pubDate><guid>http://camnpr.com/map/393.html</guid><description><![CDATA[<p><strong>简介：</strong>&nbsp;OpenLayers 让您可以无缝地使用来源各异的数据，比如来自 Web Map Service (WMS)、Web Feature Service (WFS) 和 Google Maps 的数据。这个库还提供了能够优化地图显示的平铺特性，也包括了对于地图的可用性意义非凡的功能，比如 pan 控件、层交换控件甚至用鼠标滚轮控制缩放的功能。在本文中，了解如何创建一个综合了 Microsoft&reg; Virtual Earth 的卫星影像与 NOAA Weather Radar WMS 的远足跟踪网站，其中使用了 Google Gears 来存储远足数据。</p><p>不管您是向客户展示您的服务、显示水质的样例站点还是地理标记您的度假照片，地图都是一种很有趣的显示数据的方式。在网站上使用地图日益常见，并且人们常常会使用免费的服务，比如 Google Maps、Microsoft Virtual Earth 和 Yahoo! Maps。这三个最主流的服务商提供的工具很有用并且可以让您很快就能拥有一个具有地图功能的网页。不过，除了添加标记或路点这些基本功能外，它们不是很好定制。</p><p>假设您是一名制图师或地理信息系统（GIS）专业人士，或是一名资深的爱好者，想要将不同来源的数据集中在一起。传统的方式是使用 web 地图解决方案，比如商业的 ESRI ArcIMS 或开源的 MapServer 工具。这两个工具都很优秀，均可用来综合不同的数据源并加以显示。但是，它们本身都不允许使用像 Google Maps 和 Virtual Earth 这样的数据源。此外，要通过 MapServer 模板或自己编写的 JavaScript 来构建一个功能完善的地图网站会十分耗时。</p><p>OpenLayers 可以解决这些问题。使用 OpenLayers，您可以轻松快速地在您的网站上装配一个功能全面的地图。得到的这个地图可以使用来源各异的数据，包括公共服务器、MapServer、ArcIMS 服务、ESRI ArcGIS 甚至 NASA World Wind。通过让地图使用 MapServer 驱动的 Web Map Service (WMS) 服务，还可以将您自己的数据集包括进来，比如 shapefile 和 raster 数据。</p><p><strong>注意：</strong>&nbsp;如果您尚不熟悉 GIS 术语，比如&nbsp;<em>projection</em>&nbsp;和&nbsp;<em>shapefile</em>，请参阅&nbsp;<a href="http://www.ibm.com/developerworks/cn/opensource/os-openlayers/#resources">参考资料</a>&nbsp;部分，内有题为 &ldquo;Using geospatial data in applications on Linux using GDAL&rdquo; 的 developerWorks 文章的相关链接。</p><p><a name="library_arch"></a><span class="atitle">库架构概览</span></p><p>OpenLayers 是一个独立的 JavaScript 库，不要求服务器端组件或特定的 web 服务器，由一组组织得很好的 JavaScript 类构成。它以&nbsp;<code>OpenLayers.Map</code>&nbsp;开始，这是实际的地图对象。各个层类，比如&nbsp;<code>Layer.ArcIMS</code>&nbsp;或&nbsp;<code>Layer.Google</code>，实例化后被添加到地图。<code>Control.Pan</code>&nbsp;等代表地图控件的类的作用是与地图交互。最后，是用于样式化、数据格式化、坐标存储等的各种实用工具类。完整的文档，请参见&nbsp;<a href="http://www.ibm.com/developerworks/cn/opensource/os-openlayers/#resources">参考资料</a>&nbsp;部分，内有到 OpenLayers API 文档的链接。</p><p>本文将通过构建如图 1 所示的这个示例网站介绍这些类，这个示例网站综合了来自 Google Earth、Virtual Earth、一个本地 shapefile 以及 National Oceanic and Atmospheric Administration North Radar Integrated Display with Geospatial Elements (NOAA RIDGE) 雷达覆盖范围 WMS 的数据。</p><p><br /><a name="fig1"></a><strong>图 1. 完成后的示例网站 hike.chrismichaelis.com&nbsp;</strong><br /><img src="http://camnpr.com/upload/2012/3/201203291543332568.jpg" alt="示例应用程序的屏幕快照，左边显示了具有交互选项的一个菜单，右边显示了具有彩色路径叠加的一个卫星地图" width="550" height="504" />&nbsp;<br /><br /></p><p>这个示例网站还允许用户在地图上绘制远足路线。用户可以使用 Google Gears 保存浏览器会话间的这些路线，也可以将它们导出到 Keyhole Markup Language（KML）。Google Gears 是一个浏览器插件，扩展了 JavaScript 以便它能代表页面存储与会话间一致的数据。它还能提供后台 JavaScript 执行和其他好处。在本例中，只将其用于存储。更多信息，请参见&nbsp;<a href="http://www.ibm.com/developerworks/cn/opensource/os-openlayers/#resources">参考资料</a>&nbsp;部分，内有到 Google Gears 开发人员网站的链接。</p><div class="ibm-alternate-rule">&nbsp;</div><p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link" href="http://www.ibm.com/developerworks/cn/opensource/os-openlayers/#ibm-pcon">回页首</a></p><p><a name="build_site"></a><span class="atitle">构建网站</span></p><p>第一步是构建一个包含地图的网站。为了便于组织，本文中的例子为 HTML、CSS 和 JavaScript 内容使用了一个单独的文件。这种结构还有利于未来的维护，也方便日后扩展这个站点。由于 OpenLayers 是纯 JavaScript，所以页面是纯 HTML 且不会使用任何的服务器端语言。这样的结果是可以使用快而瘦的 web 服务器，比如 Nginx 来托管它而不是像 Apache 这样的服务器。由于所有数据均存储于 Google Gears 或拉出自 Internet 资源，所以无需数据库服务器。</p><p>jQuery JavaScript 库也包含在这个新站点内。可以使用 jQuery 提供的工具来加速 JavaScript 开发，比如&nbsp;<em>selectors</em>&nbsp;支持快速访问文档对象 &mdash; 比如，使用&nbsp;<code>$(’.btnActive’).removeClass(’btnActive’);</code>&nbsp;可以从所有它出现在的实例中删除&nbsp;<code>btnActive</code>&nbsp;CSS 类，而无需具体地对由&nbsp;<code>getElementsByClassName</code>&nbsp;函数检索到的对象进行循环。同样地，&nbsp;<code>$(’#someID’)</code>&nbsp;可通过其 HTML&nbsp;<code>id</code>&nbsp;属性选择一个元素。</p><div class="ibm-alternate-rule">&nbsp;</div><p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link" href="http://www.ibm.com/developerworks/cn/opensource/os-openlayers/#ibm-pcon">回页首</a></p><p><a name="implement_ol"></a><span class="atitle">实现 OpenLayers</span></p><p>首先从 OpenLayers 站点（参见&nbsp;<a href="http://www.ibm.com/developerworks/cn/opensource/os-openlayers/#resources">参考资料</a>）下载 OpenLayers 包。将其解压缩到您网站位置内的一个子目录，并将其包含在 HTML 文件内的如下一行代码内：</p><table style="width: 100%;" border="0" cellspacing="0" cellpadding="0"><tbody><tr><td class="code-outline"><pre class="displaycode">&lt;script type="text/javascript" <br/>    src="OpenLayers/OpenLayers.js"&gt;&lt;/script&gt;’<br/></pre></td></tr></tbody></table><p>&nbsp;</p><p>在 JavaScript 代码内，使用 jQuery "document ready" 函数来设置地图。这个函数晚于&nbsp;<code>onLoad</code>&nbsp;事件触发；并不是所有图像和 DOM 元素都可以在&nbsp;<code>onLoad</code>&nbsp;事件触发时加载和准备好，但它们可以保证会在 jQuery "ready" 函数击发时加载并准备好。创建一个地图并将其分配到一个变量，如清单 1 所示。此构造函数的第二个参数允许传递选项，比如添加到地图的控件、地图的数据投影和显示投影以及可查看的最大程度。<code>maxExtents</code>&nbsp;参数限制了查看者所能平移的最大程度，并且必须指定它来避免异常操作，尤其是在使用多个数据层时。如果不指定，可能会出问题，比如根本不能平移或是有额外的层在基层上不能很好地对齐。</p><p><br /><a name="list1"></a><strong>清单 1. 在 div&nbsp;<code>mapContainer</code>&nbsp;中创建一个 OpenLayers 地图</strong></p><table style="width: 100%;" border="0" cellspacing="0" cellpadding="0"><tbody><tr><td class="code-outline"><pre class="displaycode">				<br/>$(document).ready(function() {<br/>  var olMap = new OpenLayers.Map(’mapContainer’, {<br/>    controls: <br/>      new OpenLayers.Control.MouseDefaults(),<br/>    ],<br/>    projection: new OpenLayers.Projection(’EPSG:900913’),<br/>    displayProjection: new OpenLayers.Projection(’EPSG:4326’),<br/>    maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34) <br/>  });<br/>});<br/></pre></td></tr></tbody></table><p>&nbsp;</p><p>OpenLayers 内的一个地图包含了一个基础层和（可选地）几个叠加层（或非基础）层。一个基础层通常是一个像 Google Earth 或 Virtual Earth 这样的图层；一个叠加层则通常是一个用户绘制的矢量层或来自 MapServer 的图层。一次只能激活一个基础层。</p><div class="ibm-alternate-rule">&nbsp;</div><p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link" href="http://www.ibm.com/developerworks/cn/opensource/os-openlayers/#ibm-pcon">回页首</a></p><p><a name="multiple_sources"></a><span class="atitle">从多个资源集合数据</span></p><p>通常，Google Earth 或 Virtual Earth 可用作基础层。这二者以及很多其他的商业的免费数据源都会使用球形的 Mercator 数据投影（由 European Petroleum Survey Group [EPSG] code 900913 标识）。这个投影基于地球的形状是球体模型的前提提供了以米测量的地球数据。在大比例尺时，它看上去还算正确，但如果在本地级别，就不正确了。 OpenLayers 本身并不具备重新投影数据的能力，所以包含在地图内的 所有数据必须在 Spherical Mercator 投影内提供。详细信息，请参见&nbsp;<a href="http://www.ibm.com/developerworks/cn/opensource/os-openlayers/#resources">参考资料</a>&nbsp;部分，内有到 Spherical Mercator 相关信息的链接。</p><p>现在，将基础层添加到地图。由于一次只能激活一个基础层，所以可以随意添加很多的基础层，但默认地先激活第一个基础层。稍后，我们还会创建一种方式来在这些基础层之间切换。清单 2 显示了用来添加 Virtual Earth 和 Google Earth 层的代码。</p><p><br /><a name="list2"></a><strong>清单 2. 添加 Virtual Earth 和 Google Earth 基础层</strong></p><table style="width: 100%;" border="0" cellspacing="0" cellpadding="0"><tbody><tr><td class="code-outline"><pre class="displaycode">				<br/>// Create the Virtual Earth layer<br/>var veSatLayer = new OpenLayers.Layer.VirtualEarth(’Virt. Earth’, {<br/>  sphericalMercator: true,<br/>  ’type’: VEMapStyle.Aerial,<br/>});<br/>olMap.addLayer(veSatLayer);<br/><br/>// Create a Google Earth layer (because it is not first, it is not selected by default)<br/>var googleEarth = new OpenLayers.Layer.Google(’Google’, {<br/>  sphericalMercator: true,<br/>});<br/>olMap.addLayer(googleEarth);<br/></pre></td></tr></tbody></table><p>&nbsp;</p><p>下一个要添加的层是 NOAA RIDGE WMS。这个服务提供了全美国的反射率值，通常用于天气预报和云层覆盖分析，它为您的远足计划工具提供了方便的天气指标。来自该服务的数据的格式是 NAD83 纬度/经度坐标（EPSG 代码 4269），而这与使用 Spherical Mercator 投影的要求是不兼容的。因此，不能将其直接添加到 OpenLayers。</p><p>需要使用 MapServer 执行再投影。有时，您可以请求 Spherical Mercator 投影内的数据，并且数据提供者会为您进行投影 &mdash; 但不要依赖于此。毕竟在您自己的服务器上执行再投影会更为合理些，因为那会减少对第三方服务器的负载和需求。第一步是在您的 web 服务器上安装 MapServer（大多数 Linux&reg; 软件存储库都会提供）。接下来，将如下代码：</p><table style="width: 100%;" border="0" cellspacing="0" cellpadding="0"><tbody><tr><td class="code-outline"><pre class="displaycode">&lt;900913&gt; +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 <br/>    +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null <br/>    +no_defs<br/></pre></td></tr></tbody></table><p>&nbsp;</p><p>添加到您 web 服务器上文件 /usr/share/proj/epsg 的底部。这行代码定义了 Spherical Mercator 投影以便 MapServer（及其投影库 PROJ4）能够知道如何将数据转变到这个投影。</p><p>接着，创建一个 MapServer 地图文件来定义想要包括的数据（如清单 3 所示）。关键的几点是：将地图文件的投影设为 EPSG:4326 以及定义想要拉入的 WMS 层及其相应的元数据（<code>LAYER</code>&nbsp;部分）。最后，这个地图文件必须提供一个&nbsp;<code>WEB</code>&nbsp;部分，其中&nbsp;<code>wms_srs</code>&nbsp;值包括您想要请求的这个投影 &mdash; 在本例中为 900913。这个设置列出了允许用户请求的那些投影。对于其他投影的查询会导致错误消息，要求访问者 &ldquo;请求一个受支持的 SRS&rdquo;（即一个空间参考系统 &mdash; 本质上，就是这个投影）。</p><p><br /><a name="list3"></a><strong>清单 3. 为再投影到 Spherical Mercator 而拉入到 NOAA RIDGE 雷达层的 MapServer 地图文件</strong></p><table style="width: 100%;" border="0" cellspacing="0" cellpadding="0"><tbody><tr><td class="code-outline"><pre class="displaycode">				<br/>MAP<br/>  IMAGEQUALITY 95<br/>  IMAGETYPE png<br/><br/>  OUTPUTFORMAT<br/>    NAME png<br/>    DRIVER ’GD/PNG’<br/>    MIMETYPE ’image/png’<br/>    IMAGEMODE RGBA<br/>    EXTENSION ’png’<br/>  END<br/><br/>  PROJECTION<br/>    "init=epsg:4326"<br/>  END<br/><br/>  WEB<br/>    IMAGEPATH ’/tmp/’<br/>    IMAGEURL ’/tmp/’<br/>    METADATA<br/>      "wms_srs" "EPSG:4326 EPSG:4326 EPSG:3857 EPSG:900913"<br/>    END<br/>  END<br/><br/>  LAYER<br/>    NAME noaaradar<br/>    TYPE RASTER<br/>    CONNECTIONTYPE WMS<br/>    CONNECTION "http://gis.srh.noaa.gov/arcgis/services/RIDGERadar/MapServer/WMSServer?" <br/><br/>    METADATA<br/>      "wms_srs" "EPSG:4326"<br/>      "wms_name" "0"<br/>      "wms_server_version" "1.1.1"<br/>      "wms_format" "image/png"<br/>    END<br/><br/>    PROJECTION<br/>      "init=epsg:4629"<br/>    END<br/>  END<br/>END<br/></pre></td></tr></tbody></table><p>&nbsp;</p><p>最后，可以通过引用新创建的这个地图文件向地图添加 NOAA RIDGE 雷达层，如清单 4 所示。</p><p><br /><a name="list4"></a><strong>清单 4. 通过本地 MapServer 实例添加 NOAA RIDGE 雷达 WMS</strong></p><table style="width: 100%;" border="0" cellspacing="0" cellpadding="0"><tbody><tr><td class="code-outline"><pre class="displaycode">				<br/>// Add the NOAA RIDGE radar WMS by routing it through our local MapServer instance<br/>// so that it can be re-projected on the fly to Spherical Mercator<br/>var ridgeRadar = new OpenLayers.Layer.WMS(’NOAA RidgeRadar’,<br/>        ’http://hike.chrismichaelis.com/cgi-bin/mapserv.cgi’, {<br/>  layers: ’noaaradar’,<br/>  map: ’/var/www/hike.chrismichaelis.com/mapserver/NOAARidgeRadar.map’,<br/>  transparent: true,<br/>  singleTile: true,<br/>  visibility: false,<br/>  srs: ’EPSG:900913’<br/>});<br/>olMap.addLayer(ridgeRadar);<br/></pre></td></tr></tbody></table><p>&nbsp;</p><p>通常，拉入您自己的本地数据会很有用，不管是您下载的数据还是您自己创建的数据。您可以像包括 NOAA RIDGE 雷达层那样通过 MapServer 实现这个目的。结果会如&nbsp;<a href="http://www.ibm.com/developerworks/cn/opensource/os-openlayers/#list3">清单 3</a>&nbsp;那样创建一个 MapServer 地图文件，只不过&nbsp;<code>LAYER</code>&nbsp;部分描述的是一个 shapefile 而不是之前的 WMS，如清单 5 所示。</p><p><br /><a name="list5"></a><strong>清单 5. MapServer 地图文件&nbsp;<code>LAYER</code>&nbsp;部分用以再投影并服务一个本地 shapefile</strong></p><table style="width: 100%;" border="0" cellspacing="0" cellpadding="0"><tbody><tr><td class="code-outline"><pre class="displaycode">				<br/>LAYER<br/>  NAME usaroads<br/>  TYPE LINE<br/>  DATA ’/var/www/hike.chrismichaelis.com/mapserver/usaroads/roadtrl020.shp’<br/><br/>  PROJECTION<br/>    "init=epsg:4326"<br/>  END<br/><br/>  CLASS<br/>     NAME ’roadtrl020’ <br/>     STYLE<br/>     WIDTH 2 <br/>     COLOR 255 0 0<br/>  END<br/>END<br/></pre></td></tr></tbody></table><p>&nbsp;</p><p>您还可以使用与&nbsp;<a href="http://www.ibm.com/developerworks/cn/opensource/os-openlayers/#list4">清单 4</a>&nbsp;内相同的方法向地图添加道路层，只不过需要用适当的值代替&nbsp;<code>layers</code>&nbsp;和&nbsp;<code>map</code>&nbsp;选项。此时，您就拥有了一个完全可以发挥作用的地图，可从多个资源拉入数据，包括默认的用鼠标平移以及用鼠标滑轮缩放的功能。不过，您还缺少控制可视层或绘制远足路线的功能。地图已经可以发挥作用后，现在就可以将地图缩放到您感兴趣的区域，而不是让地图保持缩小于整个美国。实现的方法是缩放到一个整数的缩放级别（可尝试一个任意的固定比例尺以便观看不同值的效果）并通过纬度和经度定义一个点。之后就可以将坐标从 WGS84 纬度和经度（EPSG:4326）投影（或<em>转变</em>）到地图的当前投影 (Spherical Mercator) 并缩放到它。这个过程如清单 6 所示。</p><p><br /><a name="list6"></a><strong>清单 6. 缩放到一个任意的纬度和经度位置</strong></p><table style="width: 100%;" border="0" cellspacing="0" cellpadding="0"><tbody><tr><td class="code-outline"><pre class="displaycode">				<br/>// Move to your default location - Pocatello, ID<br/>olMap.zoomTo(10);<br/>var newCenter = new OpenLayers.LonLat(-112.4447222, 42.8713889);<br/>newCenter.transform(new OpenLayers.Projection(’EPSG:4326’), olMap.getProjectionObject());<br/>olMap.setCenter(newCenter);<br/></pre></td></tr></tbody></table><p>&nbsp;</p><div class="ibm-alternate-rule">&nbsp;</div><p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link" href="http://www.ibm.com/developerworks/cn/opensource/os-openlayers/#ibm-pcon">回页首</a></p><p><a name="flesh"></a><span class="atitle">充实功能</span></p><p>没有导航控制，地图就不完美。默认地，OpenLayers 提供基于鼠标滑轮的缩放以及基于鼠标的平移功能。也可以添加地图上的控件 &mdash; 比如：</p><table style="width: 100%;" border="0" cellspacing="0" cellpadding="0"><tbody><tr><td class="code-outline"><pre class="displaycode">olMap.addControls(new OpenLayers.Control.NavToolbar);<br/></pre></td></tr></tbody></table><p>&nbsp;</p><p>而使用您自己的 HTML 布局来放置和呈现导航控件带来了更大的灵活性，也避免了诸如底层地图数据和导航控件间严重的颜色不协调问题。当比例尺条和文本信息叠加置于地图上（比如雪白的图和白色的比例尺文本）时，这个问题尤其突出。</p><p>在本例中，使用简单的 HTML&nbsp;<code>&lt;img&gt;</code>&nbsp;标记来拉入图标图像，使用 jQuery 将一个匿名的函数追加到该图像。这些函数可恰当地处理地图，调用缩放函数或设置地图的中心，如清单 7 所示。也可以添加控件来显示鼠标的位置和地图比例尺并提供更改可见层的功能（包括选择基础层）&mdash; 也如清单 7 所示。对于这些控件，可以提供一个&nbsp;<code>&lt;div&gt;</code>&nbsp;参数来指导 OpenLayers 将这些控件呈现到特定的 HTML<code>&lt;div&gt;</code>&nbsp;元素而非默认的（直接在地图上绘制它）。</p><p><br /><a name="list7"></a><strong>清单 7. 添加缩放、平移和层选择控件以及鼠标定位和比例尺指示器</strong></p><table style="width: 100%;" border="0" cellspacing="0" cellpadding="0"><tbody><tr><td class="code-outline"><pre class="displaycode">				<br/>// Set up your map GUI controls (vs. using OpenLayers built-in controls)<br/>$(’#zoomIn’).click(function() {<br/>  olMap.zoomIn();<br/>});<br/>$(’#zoomOut’).click(function() {<br/>  olMap.zoomOut();<br/>});<br/>$(’#moveUp’).click(function() {<br/>  // toArray on bounds are in order of left, bottom, right, top<br/>  olMap.setCenter(<br/>    new OpenLayers.LonLat(olMap.getCenter().lon, olMap.getExtent().toArray()[3]));<br/>});<br/>$(’#moveDown’).click(function() {<br/>  olMap.setCenter(<br/>    new OpenLayers.LonLat(olMap.getCenter().lon, olMap.getExtent().toArray()[1]));<br/>});<br/>$(’#moveLeft’).click(function() {<br/>  olMap.setCenter(<br/>    new OpenLayers.LonLat(olMap.getExtent().toArray()[0], olMap.getCenter().lat));<br/>});<br/>$(’#moveRight’).click(function() {<br/>  olMap.setCenter(<br/>    new OpenLayers.LonLat(olMap.getExtent().toArray()[2], olMap.getCenter().lat));<br/>});<br/><br/>// Add the mouse position to your Controls area<br/>olMap.addControl(new OpenLayers.Control.MousePosition({<br/>  ’div’: OpenLayers.Util.getElement(’mousePosition’),<br/>  numDigits: 4<br/>}));<br/><br/>// Add a scale indicator to the Controls area<br/>olMap.addControl(new OpenLayers.Control.ScaleLine({<br/>  ’div’: OpenLayers.Util.getElement(’scaleBar’),<br/>  geoDesic: true<br/>}));<br/><br/>// Add a layer switcher to your Controls area<br/>olMap.addControl(new OpenLayers.Control.LayerSwitcher({<br/>  ’div’: OpenLayers.Util.getElement(’layerSwitcher’),<br/>  roundedCorner: false<br/>}));<br/></pre></td></tr></tbody></table><p>&nbsp;</p><p><a name="adv_functionality"></a><span class="smalltitle">高级功能</span></p><p>您可能还会希望您网站的访问者能够在屏幕上绘制远足路线。您可以通过向 HTML 文件添加几个具有图像标记的按钮：<strong>pan mode</strong>、<strong>draw mode</strong>、&nbsp;<strong>delete mode</strong>&nbsp;和&nbsp;<strong>Save to KML</strong>，来实现这个功能。在 JavaScript 中，首先设置一个包含了远足路线的矢量层并将其添加到地图。接下来，创建两个控件：&nbsp;<code>SelectFeature</code>&nbsp;和&nbsp;<code>DrawFeature</code>。在&nbsp;<code>SelectFeature</code>&nbsp;控件上，向&nbsp;<code>featurehighlighted</code>&nbsp;事件添加一个函数来删除所选择的特性，它实际上就是一个&ldquo;删除控件&rdquo;。 将&nbsp;<code>box</code>&nbsp;设为 True，将&nbsp;<code>hover</code>&nbsp;设为 False，这会让此控件绘制一个与此线交叉的框以删除它，而不是只在其上悬浮。而绘图控件则更为直白，只需将其添加到地图即可。</p><p>接下来，使用 jQuery 向每个新图像 &ldquo;按钮&rdquo; 添加一个函数。这些函数的主要目的是对未使用的控件调用&nbsp;<code>deactivate()</code>，对使用中的控件调用&nbsp;<code>activate()</code>。如果&nbsp;<code>SelectFeature</code>&nbsp;和&nbsp;<code>DrawFeature</code>&nbsp;控件均被去激活，那么地图将转变为平移模式。通过添加和删除&nbsp;<code>btnActive</code>CSS 类还突出了这些函数内的活动按钮，这可以将边界颜色更改为白色。所有这些步骤均显示在清单 8 中，这之后，地图就达到了理想的功能水平。</p><p><br /><a name="list8"></a><strong>清单 8. 添加矢量层并设置函数来与其交互</strong></p><table style="width: 100%;" border="0" cellspacing="0" cellpadding="0"><tbody><tr><td class="code-outline"><pre class="displaycode">				<br/>// Create a vector layer that will represent your hiking routes<br/>var hikePaths = new OpenLayers.Layer.Vector("Hike Routes", {<br/>  strategies: [new OpenLayers.Strategy.Fixed()],<br/>  style: {<br/>    strokeWidth: 3,<br/>    strokeColor: "#00eeee"<br/>  }<br/>});<br/>olMap.addLayer(hikePaths);<br/><br/>// Set up your pan and draw mode toggling and edit controls<br/>featureSelect = new OpenLayers.Control.SelectFeature(hikePaths, {<br/>  box: true,<br/>  multiple: true,<br/>  hover: false,<br/>  eventListeners: {<br/>    featurehighlighted: function(feat) {<br/>      // Remove a feature from the layer<br/>      hikePaths.destroyFeatures(hikePaths.selectedFeatures);<br/>    }<br/>  }<br/>});<br/>featureDraw = new OpenLayers.Control.DrawFeature(hikePaths, OpenLayers.Handler.Path);<br/>olMap.addControls([featureSelect, featureDraw]);<br/><br/>$(’#drawMode’).click(function() {<br/>  featureSelect.deactivate();<br/>  featureDraw.activate();<br/>  $(’.btnActive’).removeClass(’btnActive’);<br/>  $(’#drawMode’).addClass(’btnActive’);<br/>});<br/>$(’#panMode’).click(function() {<br/>  featureSelect.deactivate();<br/>  featureDraw.deactivate();<br/>  $(’.btnActive’).removeClass(’btnActive’);<br/>  $(’#panMode’).addClass(’btnActive’);<br/>});<br/>// Set up your delete button - <br/>// just turns on selection mode, and on select the listener will destroy the feature<br/>$(’#deleteMode’).click(function() {<br/>  featureDraw.deactivate();<br/>  featureSelect.activate();<br/>  $(’.btnActive’).removeClass(’btnActive’);<br/>  $(’#deleteMode’).addClass(’btnActive’);<br/>});<br/></pre></td></tr></tbody></table><p>&nbsp;</p><p>由于很多人都使用 Google Earth 和 Google Maps，<code>Layer</code>&nbsp;对象的一个方便特性是可以导出成 KML 格式。可以通过<code>OpenLayers.Format.KML</code>&nbsp;类，如清单 9 实现这个功能。</p><p><br /><a name="list9"></a><strong>清单 9. 将矢量层特性导出为 KML 格式</strong></p><table style="width: 100%;" border="0" cellspacing="0" cellpadding="0"><tbody><tr><td class="code-outline"><pre class="displaycode">				<br/>// Set up the Save to KML button<br/>$(’#saveKML’).click(function() {<br/>  var kmlFormat = new OpenLayers.Format.KML();<br/>  var newWindow = window.open(’’, <br/>      ’KML Export ’ + (new Date()).getTime(), "width=300,height=300");<br/>  newWindow.document.write(’&lt;textarea id="kml" style="width: 100%; height: 100%"&gt;’ +<br/>      kmlFormat.write(hikePaths.features) + ’&lt;/textarea&gt;’);<br/>});<br/></pre></td></tr></tbody></table><p>&nbsp;</p><p><a name="gears"></a><span class="smalltitle">使用 Google Gears 存储数据</span></p><p>使用 Google Gears 让网站可以保存浏览器会话间的远足数据，这就使网站更为方便和无缝地供日常使用。首先，<code>OpenLayers.Protocol.SQL.Gears</code>&nbsp;类必须被实例化并被给定一个数据库和表名。随后，只需将此矢量层的&nbsp;<code>protocol</code>&nbsp;属性设为 Gears 实例。在初始设置阶段，可使用&nbsp;<code>read()</code>&nbsp;函数从数据库拉出已存储的特性，而这些特性可随后被传递到矢量层的&nbsp;<code>addFeatures()</code>，如清单 10 所示。</p><p><br /><a name="list10"></a><strong>清单 10. 用 Google Gears 添加矢量层（对比清单 8 &mdash; 没有用 Gears 的矢量层）</strong></p><table style="width: 100%;" border="0" cellspacing="0" cellpadding="0"><tbody><tr><td class="code-outline"><pre class="displaycode">				<br/>// Create a vector layer that will represent your hiking routes<br/>var hikePaths = new OpenLayers.Layer.Vector("Hike Routes", {<br/>  strategies: [new OpenLayers.Strategy.Fixed()],<br/>  style: {<br/>    strokeWidth: 3,<br/>    strokeColor: "#00eeee"<br/>  }<br/>});<br/><br/>// Because you’ll use Google Gears to store hiking routes, set up that protocol:<br/>var gears = new OpenLayers.Protocol.SQL.Gears({<br/>  saveFeatureState: false,<br/>  databaseName: ’hikingPaths’,<br/>  tableName: ’hikingPaths’<br/>});<br/>if (!gears.supported()) {<br/>  alert(’Warning: Google Gears is not available. You will not be able to use the hike <br/>         path drawing tools. Visit http://gears.google.com to install Gears.’);<br/>}<br/>else {<br/>  hikePaths.protocol = gears;<br/>  var existingGearsData = gears.read();<br/>  if (existingGearsData.features) hikePaths.addFeatures(existingGearsData.features);<br/>}<br/>// Finally, add the layer<br/>olMap.addLayer(hikePaths);<br/></pre></td></tr></tbody></table><p>&nbsp;</p><p>当特性删除后，它们必须从 Gears 数据库以及该层删除，所以将此添加到&nbsp;<code>SelectFeature</code>&nbsp;控件的&nbsp;<code>featurehighlighted</code>&nbsp;事件（参见清单 11）。同样地，当添加特性时，使用&nbsp;<code>DrawFeature</code>&nbsp;控件的&nbsp;<code>featureAdded</code>&nbsp;属性。</p><p><br /><a name="list11"></a><strong>清单 11. 添加和删除 Gears 数据库内的特性（对比清单 8 &mdash; 在没有 Gears 时管理特性）</strong></p><table style="width: 100%;" border="0" cellspacing="0" cellpadding="0"><tbody><tr><td class="code-outline"><pre class="displaycode">				<br/>// Set up your pan and draw mode toggling and edit controls<br/>featureSelect = new OpenLayers.Control.SelectFeature(hikePaths, {<br/>  box: true,<br/>  multiple: true,<br/>  hover: false,<br/>  eventListeners: {<br/>    featurehighlighted: function(feat) {<br/>      // Remove it from the Gears database<br/>      if (gears.supported()) gears.delete(hikePaths.selectedFeatures);<br/>      // Remove the actual feature from the layer<br/>      hikePaths.destroyFeatures(hikePaths.selectedFeatures);<br/>    }<br/>  }<br/>});<br/>featureDraw = new OpenLayers.Control.DrawFeature(hikePaths, OpenLayers.Handler.Path, {<br/>  featureAdded: function(feat) {<br/>    // Send to the Gears database<br/>    if (gears.supported()) gears.create(feat);<br/>  }<br/>});<br/>olMap.addControls([featureSelect, featureDraw]);</pre></td></tr></tbody></table><p><a name="N10263"></a><span class="atitle">结束语</span></p><p>虽然这里所构建的网站完全可以发挥作用，但还是有一些增进可以做的：用一个定位器 lap 来更好地显示位置、为 NOAA RIDGE 雷达和其他层用一个图例或键、用一个社交网络关联来共享远足的经历等等。请参见&nbsp;<a href="http://www.ibm.com/developerworks/cn/opensource/os-openlayers/#resources">参考资料</a>&nbsp;部分，内有到生动示例的链接，也可以参考下载部分以获得全部源代码。如您想编写自己的代码，可以参考&nbsp;<a href="http://www.ibm.com/developerworks/cn/opensource/os-openlayers/#resources">参考资料</a>&nbsp;部分的这些 OpenLayers 示例。一切顺利！</p><p>&nbsp;</p><div class="ibm-alternate-rule">&nbsp;</div><p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link" href="http://www.ibm.com/developerworks/cn/opensource/os-openlayers/#ibm-pcon">回页首</a></p><p><span class="atitle"><a name="download"></a>下载</span></p><table class="ibm-data-table" style="width: 100%;" border="0" cellspacing="0" cellpadding="0"><tbody><tr><th scope="col">描述</th><th scope="col">名字</th><th scope="col">大小</th><th scope="col">下载方法</th></tr><tr><td class="tb-row" scope="row">远足跟踪和计划示例项目</td><td nowrap="nowrap">os-openlayers-HikeExample.zip</td><td nowrap="nowrap">6.6KB</td><td nowrap="nowrap"><a class="fbox" href="http://www.ibm.com/developerworks/apps/download/index.jsp?contentid=659636&amp;filename=os-openlayers-HikeExample.zip&amp;method=http&amp;locale=zh_CN">HTTP</a></td></tr></tbody></table><p><a class="ibm-forward-link" href="http://www.ibm.com/developerworks/cn/whichmethod.html">关于下载方法的信息</a></p><p>&nbsp;</p><p><a name="resources"></a><span class="atitle">参考资料</span></p><p><strong>学习</strong></p><ul><li>有关本文中所用概念和术语的额外背景，请参见 developerWorks 文章 &ldquo;<a href="http://www.ibm.com/developerworks/cn/opensource/os-openlayers/TBD-NotPublishedYet">Using geospatial data in applications on Linux using GDAL</a>&rdquo;。&nbsp;<br /><br /></li><li><a href="http://docs.openlayers.org/library/index.html">OpenLayers 库文档</a>&nbsp;提供了针对 OpenLayers 的完整指导。&nbsp;<br /><br /></li><li>了解有关 Google Gears 的更多信息，请参见&nbsp;<a href="http://code.google.com/apis/gears/">Google Gears developer 文档</a>。&nbsp;<br /><br /></li><li><a href="http://openlayers.org/download/">OpenLayers 下载页</a>&nbsp;提供了最新的 OpenLayers 库。&nbsp;<br /><br /></li><li>OpenLayers 网站上的&nbsp;<a href="http://docs.openlayers.org/library/spherical_mercator.html">Spherical Mercator 信息</a>&nbsp;提供了使用公共数据源的须知。&nbsp;<br /><br /></li><li>如果您有兴趣，可查看&nbsp;<a href="http://mercator.myzen.co.uk/mercator.pdf">球形 Mercator 和其他的 mercator 投影的数学定义</a>。&nbsp;<br /><br /></li><li><a href="http://openlayers.org/dev/examples/">OpenLayers Examples</a>&nbsp;是所有 OpenLayers 特性演示的一个很好的资源。&nbsp;<br /><br /></li><li><a href="http://hike.chrismichaelis.com/">完成的示例</a>&nbsp;显示了本文中所讨论的所有概念。&nbsp;<br /><br /></li><li>访问 developerWorks&nbsp;<a href="http://www.ibm.com/developerworks/opensource">Open source 专区</a>，获得丰富的 how-to 信息、工具和项目更新，帮助您用开放源码技术进行开发，并与 IBM 产品结合使用，以及我们&nbsp;<a href="http://www.ibm.com/developerworks/opensource/library/os-top10.html">最受欢迎的文章和教程</a>。<br /><br /></li><li>查看免费的&nbsp;<a href="http://www.ibm.com/developerworks/cn/offers/lp/demos/">developerWorks 演示中心</a>，观看并了解 IBM 及开源技术和产品功能。<br /><br /></li><li>随时关注 developerWorks&nbsp;<a href="http://www.ibm.com/developerworks/cn/offers/techbriefings/">技术活动</a>和<a href="http://www.ibm.com/developerworks/cn/swi/">网络广播</a>。&nbsp;<br /><br /></li><li>访问 developerWorks&nbsp;<a href="http://www.ibm.com/developerworks/cn/opensource/">Open source 专区</a>获得丰富的 how-to 信息、工具和项目更新以及<a href="http://www.ibm.com/developerworks/cn/opensource/best2009/index.html">最受欢迎的文章和教程</a>，帮助您用开放源码技术进行开发，并将它们与 IBM 产品结合使用。<br /><br /></li></ul><p><strong>获得产品和技术</strong></p><ul><li><a href="http://mapserver.org/">MapServer</a>&nbsp;是一个可动态再投影数据的服务器端地图解决方案。&nbsp;<br /><br /></li><li>使用&nbsp;<a href="http://www.ibm.com/developerworks/cn/downloads/">IBM 产品评估试用版软件</a>&nbsp;改进您的下一个开发项目，这些软件可以通过下载获得。<br /><br /></li><li>下载&nbsp;<a href="http://www.ibm.com/developerworks/cn/downloads/">IBM 产品评估试用版软件</a>&nbsp;或&nbsp;<a href="http://www.ibm.com/developerworks/cn/downloads/soasandbox/people/">IBM SOA 人员沙箱</a>，并开始使用来自 DB2&reg;、Lotus&reg;、Rational&reg;、Tivoli&reg; 和 WebSphere&reg; 的应用程序开发工具和中间件产品。<br /><br /></li></ul><p><strong>讨论</strong></p><ul><li>加入&nbsp;<a href="http://www.ibm.com/developerworks/cn/community/">developerWorks 中文社区</a>，developerWorks 社区是一个面向全球 IT 专业人员，可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。<br /><br /></li></ul><p><a name="author"></a><span class="atitle">关于作者</span></p><div class="ibm-container ibm-portrait-module ibm-alternate-two"><div class="ibm-container-body"><p><a name="author1"></a>Christopher Michaelis 是一名擅长于 Web 托管和 Web 应用程序的开发人员。他曾在 Utah State University 和 Idaho State University 学习过计算机科学和地理信息科学。他的开发经验涵盖的范围很广，包括环境建模、教育、糖尿病数据分析、系统管理工具、web 托管、平台集成以及基于位置的服务。</p></div></div>引自:http://www.ibm.com/developerworks/cn/opensource/os-openlayers/]]></description><category>地图(Maps)</category><comments>http://camnpr.com/map/393.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=393</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=393&amp;key=d79e04a2</trackback:ping></item><item><title>收集js map框架</title><author>camnpr@163.com (camnpr)</author><link>http://camnpr.com/map/391.html</link><pubDate>Mon, 25 Jul 2011 13:35:37 +0800</pubDate><guid>http://camnpr.com/map/391.html</guid><description><![CDATA[<p><strong>7款javascript地图脚本</strong>, 大多数都是基于Google地图。</p><h4>1.&nbsp;<a href="http://addresschooser.mapeed.com/doc/">Mapeed.AddressChooser</a>&nbsp;(<a href="http://addresschooser.mapeed.com/example/with_prototype.html">演示地址</a>)</h4><p><a href="http://camnpr.com/upload/2012/3/201203291545143142.gif" alt="Mapeed.AddressChooser - Javascript图片相册脚本" /></a></p><p>Mapeed.AddressChooser 是一个JavaScript脚本， 用来创建地址表单和地图结合的特效。</p><p>当在地址表单中选择和输入地址时，实时在地图上显示地理位置，默认是使用Google Maps，你也可以整合其它地图服务。</p><h4>2.&nbsp;<a href="http://plugins.jquery.com/project/google-maps-modal">GoogleMapsModal</a></h4><p><a href="http://plugins.jquery.com/project/google-maps-modal"><img title="7个Javascript地图脚本" src="http://paranimage.com/images/javascript/javascript-21-18-8a.png" alt="GoogleMapsModal - Javascript图片相册脚本" /></a></p><p>使用jquery插件GoogleMapsModal可以实现Google地图模拟功能，把Google地图放在你需要的任何地方。</p><h4>3.&nbsp;<a href="http://github.com/digitalspaghetti/jmaps/tree/master">jMaps</a></h4><p>jMaps 是一个 jQuery 的插件，提供了简单的 API 来访问 Google 地图.</p><h4>4.&nbsp;<a href="http://plugins.jquery.com/project/jQMaps">jQMaps</a></h4><p>jQMaps 是一个 jQuery 的插件，提供了简单的 API 来访问 Google 地图,可增加自定义点、线。</p><h4>5.&nbsp;<a href="http://snippets.dzone.com/posts/show/4361">jQuery Maps Interface</a></h4><p>jQuery Maps Interface是一个 jQuery 的插件，对google,yahoo地图提供接口支持</p><h4>6.&nbsp;<a href="http://mapeasy.sourceforge.net/">MapEasy</a></h4><p><a href="http://camnpr.com/upload/2012/3/201203291545153010.jpg" alt="MapEasy - Javascript图片相册脚本" /></a></p><p>MapEasy以Google Map的方式实现了基本的GIS功能和简单地物标注等。注意她是一个纯粹的客户端JS库，不需要任何插件，并且与后台数据的获取方式完全分离，你可以在服务器放置简单的图片，也可以在后台架设你喜欢的地图服务器（MapX，GeoServer等），从而使她天生轻量级，更加易于各种环境下的部署和扩展。虽然是完全运用弱类型语言JavaScript编写，但良好的OO设计和模式的运用丝毫没有影响她的完美表现（JavaScript中的OO和模式现在越来越受到重视也是一个趋势）。</p><h4>7.&nbsp;<a href="http://mapstraction.com/">Mapstraction</a></h4><p><a href="http://camnpr.com/upload/2012/3/201203291545178641.jpg" alt="Mapstraction - Javascript图片相册脚本" /></a></p><p>有不少地图提供商都提供不同 API，如果你要更换提供商，比如从 Google Maps 到 MapQuest，需要更新代码，Mapstraction 提供了常用地图提供商的 API，只需该一行代码就能完成转换。</p>]]></description><category>地图(Maps)</category><comments>http://camnpr.com/map/391.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=391</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=391&amp;key=4815cecb</trackback:ping></item><item><title>Google InfoWindow 及第三方插件 Google Maps Bubble Templa</title><author>camnpr@163.com (camnpr)</author><link>http://camnpr.com/map/262.html</link><pubDate>Thu, 14 Apr 2011 10:34:35 +0800</pubDate><guid>http://camnpr.com/map/262.html</guid><description><![CDATA[<p><p>&nbsp;</p><p>各个地图标点框样式案例：<a href="http://gmaps-utility-library-dev.googlecode.com/svn/trunk/extinfowindow/examples/cssSkins.html">http://gmaps-utility-library-dev.googlecode.com/svn/trunk/extinfowindow/examples/cssSkins.html</a></p><p>提示框带Tab： <a href="http://econym.org.uk/gmap/example_ewindowtab.htm">http://econym.org.uk/gmap/example_ewindowtab.htm</a></p><p>这EBubble能浮在上面：<a href="http://econym.org.uk/gmap/example_ebubble.htm">http://econym.org.uk/gmap/example_ebubble.htm</a></p></p><p style="border-top-width: 0px; clear: both; font-size: 14px; border-bottom-width: 0px; margin: 0px 0px 1em">如果你正在寻找更多的定制,这里有一些第三方扩展提供另一个标准 ：GInfoWindows:<span>&nbsp;</span><a rel="nofollow" style="font-size: 14px; color: rgb(0,119,204)" href="http://gmaps-utility-library.googlecode.com/svn/trunk/extinfowindow/">ExtInfoWindow</a>,<span>&nbsp;</span><a rel="nofollow" style="font-size: 14px; color: rgb(0,119,204)" href="http://gmaps-utility-library.googlecode.com/svn/trunk/popupmarker/">PopupMarker</a>,<span>&nbsp;</span><a rel="nofollow" style="font-size: 14px; color: rgb(0,119,204)" href="http://econym.org.uk/gmap/ewindows.htm">EWindow</a>, and<span>&nbsp;</span><a rel="nofollow" style="font-size: 14px; color: rgb(0,119,204)" href="http://econym.org.uk/gmap/ebubble.htm">EBubble</a></p>]]></description><category>地图(Maps)</category><comments>http://camnpr.com/map/262.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=262</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=262&amp;key=5306a807</trackback:ping></item></channel></rss>
