OpenLayers介绍和相关计算

OpenLayers是一个用于开发WebGIS客户端的JavaScript包。OpenLayers 支持的地图来源包括Google Maps、Yahoo、 Map、微软Virtual Earth 等,用户还可以用简单的图片地图作为背景图,与其他的图层在OpenLayers 中进行叠加,在这一方面OpenLayers提供了非常多的选择。除此之外,OpenLayers实现访问地理空间数据的方法都符合行业标准。OpenLayers 支持Open GIS 协会制定的WMS(Web Mapping Service)和WFS(Web Feature Service)等网络服务规范,可以通过远程服务的方式,将以OGC 服务形式发布的地图数据加载到基于浏览器的OpenLayers 客户端中进行显示。OpenLayers采用面向对象方式开发,并使用来自Prototype.js和Rico中的一些组件。
  OpenLayers 是一个专为Web GIS 客户端开发提供的JavaScript 类库包,用于实现标准格式发布的地图数据访问。从OpenLayers2.2版本以后,OpenLayers已经将所用到的Prototype.js组件整合到了自身当中,并不断在Prototype.js的基础上完善面向对象的开发,Rico用到地方不多,只是在OpenLayers.Popup.AnchoredBubble类中圆角化DIV。OpenLayers2.4版本以后提供了矢量画图功能,方便动态地展现“点、线和面”这样的地理数据。
  在操作方面,OpenLayers 除了可以在浏览器中帮助开发者实现地图浏览的基本效果,比如放大(Zoom In)、缩小(Zoom Out)、平移(Pan)等常用操作之外,还可以进行选取面、选取线、要素选择、图层叠加等不同的操作,甚至可以对已有的OpenLayers 操作和数据支持类型进行扩充,为其赋予更多的功能。例如,它可以为OpenLayers 添加网络处理服务WPS 的操作接口,从而利用已有的空间分析处理服务来对加载的地理空间数据进行计算。同时,在OpenLayers提供的类库当中,它还使用了类库Prototype.js 和Rico 中的部分组件,为地图浏览操作客户端增加Ajax 效果。
-----------------------------------------------------
1、主要使用的类:
OpenLayers.Control.* 添加地图控件(Navigation,OverviewMap,...)
                     事件(Click)
                     处理测量(Measure)
                     绘制几何图形(DrawFeature)
OpenLayers.Map       设置地图
OpenLayers.Bounds    设置背景区域
OpenLayers.Size      设置窗口/层的大小
OpenLayers.Marker    标记对象
OpenLayers.Popup     信息提示框(常与标记结合使用)
OpenLayers.Handler.* 处理事件(Click,Drag,Hover)
                     添加对象(Point,Path<路径>,
                     Polygon<多边形>,
                     RegularPolygon<规则多边形>)
OpenLayers.Style
OpenLayers.StyleMap  设置基本样式和地图样式
OpenLayers.Pixel     设置像素
OpenLayers.Icon      设置图标
OpenLayers.Feature.Vector    矢量要素:点、线、面
OpenLayers.Layer.Vector      矢量图层
.....................//这里不作过多介绍

2、主要使用的事件方法:
obj=[map,marker,layer,....]       //事件拥有者
obj.events.on(options);
obj.register('eventType',this,func);//注册事件并设置回调函数
layer.setVisibility(true/false)   //设置层是否显示
经常操作的属性:
options    {}          完成对对象属性的设置
注:使用最多的事件是要素feature的事件。

3、面积计算方法:
Take the coordinates and plug them into the Polygon Area Formula:
For example, if the state's coordinates were (x1,y1),(x2,y2),(x3,y3),(x4,y4) and (x5,y5) the formula would look like this:
A = (1/2)(x1*y2 - x2*y1 + x2*y3 - x3*y2 + x3y4 - x4y3 + x4*y5 -x5*y4 + x5*y1 - x1*y5).

Read more: How to Calculate Square Miles | eHow.com http://www.ehow.com/how_4654892_calculate-square-miles.html#ixzz1qkMC0UWG

[[103.930438,30.749713],[104.079438,30.744213],[104.047938,30.673713],[103.895938,30.696713]]

[[[103.946438,30.755213],[104.099438,30.749713],[104.055438,30.651713],[103.946438,30.755213]]]

4、JS计算两个经纬度之间的距离:
 //获取两个经纬度之间的距离,单位km:千米
 function  getLatlngsDistance(lata,lnga,latb,lngb,type){//type标识单位m或km
    if((lnga-lngb==0)&&(lata-latb==0))return 0;
    var distance= 111119*Math.sqrt(Math.pow(lnga - lngb, 2) + Math.pow(lata - latb, 2));
    var num=distance+"";num=num.substring(0, num.indexOf(".")),rnum=0;
    if(type=="m")rnum=parseInt(num);
    else rnum=parseInt(num)/1000;
    return this.convertFloat(rnum,6);
}
上面的介绍很不详细,有时间的话可以下载官方文档来看,地址:http://openlayers.org/

原文地址:https://www.cnblogs.com/boonya/p/2633188.html