首页 新闻 搜索 专区 学院

GOOGLE 地图问题

0
悬赏园豆:10 [已解决问题] 解决于 2010-11-22 23:41

现在我有左上角经度和纬度,右上角经度和纬度,中心点经度和纬度,请问高手我如何在google地图上标出这个块矩形区域啊?

童同的主页 童同 | 菜鸟二级 | 园豆:258
提问于:2010-10-14 15:33
< >
分享
最佳答案
0

有左右顶点及中心点的信息应足够把矩形画出来了。

首先要将地理坐标(即经纬度)转换为屏幕坐标,根据三个点的屏幕坐标应可以算出左下角和右下角的屏幕坐标。

假设左上角坐标(x1,y1),右上角(x2,y1),中心点(x,y),左下角(x3,y3),右下角(x4,y4)。

则算出:x3=x1,y3=y1-2*(y1-y)=2y-y1,x4=x2, y4=y3

有了矩形四个点的坐标,利用google的api即可在地图上标出矩形。

由于google的地图数据源连不上,所以用Openlayers的测试用的数据源写了个例子:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Example</title>
<script src="../lib/OpenLayers.js"></script>
<script type="text/javascript">
var map;
function init(){
map
= new OpenLayers.Map('map');

var ol_wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
"http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'} );

var boxes = new OpenLayers.Layer.Vector( "Boxes" );

var bounds = new OpenLayers.Bounds(120.18,31.35,121.26,31.12);

box
= new OpenLayers.Feature.Vector(bounds.toGeometry());
boxes.addFeatures(box);

map.addLayers([ol_wms, boxes]);
var lonat = new OpenLayers.LonLat(120.8, 32);
map.setCenter(lonat);
map.zoomTo(
5);
}
</script>
</head>
<body onload="init()">
<h1 id="title">Example</h1>
<div id="map" class="smallmap"></div>
</body>
</html>

 

其中:var bounds = new OpenLayers.Bounds(120.18,31.35,121.26,31.12);这句

120.18,31.35是矩形区域左下角的经纬度;121.26,31.12是右上角的经纬度

需要引用openlayers这个js库<script src="../lib/OpenLayers.js"></script>

收获园豆:10
wang_yb | 老鸟四级 |园豆:4513 | 2010-10-14 21:17
就是不知道怎么画啊。能给我个例子吗? 谢谢!!
童同 | 园豆:258 (菜鸟二级) | 2010-10-15 14:39
@童同: 我修改了一下回答,请参考。
wang_yb | 园豆:4513 (老鸟四级) | 2010-10-15 16:22
其他回答(1)
0

你觉得靠3个点能画矩形吗?

Gray Zhang | 园豆:17610 (专家六级) | 2010-10-14 16:55
我就三个点吗?
支持(0) 反对(0) 童同 | 园豆:258 (菜鸟二级) | 2010-10-15 14:38
从你的描述来看,确实是左上角,右上角,中心三个点,并且你没详细说明这个中心点是指一个矩形的中心点,还是指全球中心点,还是指你的地图某个范围的中心点,因此我真没办法……
支持(0) 反对(0) Gray Zhang | 园豆:17610 (专家六级) | 2010-10-15 14:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册