OpenLayers实现根据经纬度范围在地图上定位并画出区域

昨天完成了在页面上展现WMS服务地图。
之后的业务是在地图上定位数据的显示区域。用于定位的元数据在新建时会初始化一个经纬度范围,定位的原理是根据这个经纬度范围确定在地图上显示的范围,并将区域用一个矩形框起来。
由于是头一次做地图定位,走了很多的冤枉路。下面把过程记录下来,和大家一起分享。

尝试1:在得到经纬度(四个点,分别是东经,西经,南纬,北纬),根据上述的经纬度取区域中心点的经纬度,然后根据这个中心点的经纬度定位。这期间遇到的问题是显示地图和定位按钮不在同一个frame中,导致了,定位按钮所触发的js函数始终得不到地图的属性。之后改了按钮js函数的调用路径才得以解决。一个很奇葩的路径:

 

window.parent.frames[‘right’].Location()

 

下面是尝试1的代码片段:

 

 

if(marker != null){

map.display(false); //隐藏上一次的标记

}

//冲map页面获取map的属性值

var lon = (parseFloat(west) + parseFloat(east))/2;

var lat = (parseFloat(south) + parseFloat(north))/2;

var lonlat = new OpenLayers.LonLat(lon,lat);  //得到区域中心点的范围

//alert(lonlat);

map.zoomTo(3);

map.panTo(lonlat);

//定一个Mark层

var markers = new OpenLayers.Layer.Markers( “Markers” );

        map.addLayer(markers);

    var size = new OpenLayers.Size(22,34);

    var offset = new OpenLayers.Pixel(-(size.w), -size.h);

    var icon = new OpenLayers.Icon(‘../images/hover.png’,size,offset);

    markers.addMarker(new OpenLayers.Marker(lonlat,icon));

 

上面的代码片段采用的是Markers来标记一个点,和定位区域在理解上有所出入,所以果断把代码注释掉,改用box来做区域标记。下面是代码片段:

 

 

var lon = (parseFloat(west) + parseFloat(east))/2;

var lat = (parseFloat(south) + parseFloat(north))/2;

var lonlat = new OpenLayers.LonLat(lon,lat);  //得到区域中心点的范围

//定义一个box层

    var boxes  = new OpenLayers.Layer.Boxes( “Boxes” );

    if(this.box != null){

    this.box.display(false); //清除上一次的区域标记

    }

    //定义一个Bounds

    bounds = new OpenLayers.Bounds(); 

    //有参数生成两个经纬度

    var lonlat1 = new OpenLayers.LonLat(parseFloat(west),parseFloat(south));

    var lonlat2 = new OpenLayers.LonLat(parseFloat(east),parseFloat(north));

    bounds.extend(lonlat1);

    bounds.extend(lonlat2);//生成一个经纬度范围的bounds

 

    box = new OpenLayers.Marker.Box(bounds);

    box.events.register(“click”, box, function (e) {

                      this.setBorder(“blue”);

                    });//注册box的点击事件

    boxes.addMarker(box);

    map.addLayer(boxes);

    map.zoomTo(3); //以第3级方式显示地图

map.panTo(lonlat); //平移到范围的中心点

 

上面就是一个使用OpenLayers实现在地图上以一个区域定位的例子。鉴于个人对OpenLayers的理解有限,实现方法可能不是最佳的,请谅解。

转载自:https://blog.csdn.net/lovinghong/article/details/84177236

You may also like...