openlayers 多边形重叠判断平移

主要目的:

在做GIS开发时,常常需要用到空间判断的算法。比如:判断地图中的多边形与多边形是否相交。我在项目中具体的需求就是如此,在绘制多个polygon多边形后,判断多边形之间是否重叠,如果重叠,则需要将两个多边形分离。延某一个方向移动该多边形。在选择分离重叠的多边形方案时,可以确定以其中一个多边形为中心,即参考物。移动时平移其周边的多边形即可。
1,首先要获得周边移动对象
2,判断多边形之间是否相交,用自带函数intersect()
3,计算移动的方向和移动距离,由于openalyers中的move(x,y)和moveto(x,y),如果直接将x,y代入数字只能移动一段特定的距离,没有方向的选择,所以我们这里还是用move(x,y)函数,但是首先获得需要一定方向和距离直线上两点的经纬度,然后利用getViewPortPxFromLonLat(lonlat, resolution) 函数将具体的经纬度坐标转换为像素点。
调用dragfeature类中的geometry.move(res * (pixel.x - lastPixel.x),  res * (lastPixel.y - pixel.y));函数。便可移动多边形,方向和距离分别为两点经纬度的方向和距离。

代码显示:

1判断多边形重叠:
var res = map.getResolution();
		            for(var i=0;i
2,经纬度转换为像素点:
/*
					 * 函数:经纬度转换为像素点
					 */           
		            function getViewPortPxFromLonLat(lonlat, resolution) {
		                var px = null; 
		                if (lonlat != null) {               
		                    px = new OpenLayers.Pixel(
		                        (1/resolution * (lonlat.x - extent.left)),
		                        (1/resolution * (extent.top - lonlat.y))
		                    );    
		                }
		                return px;
		            }



具体代码为我实际项目中应用代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>



	
	<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
    String id = request.getParameter("id");
	%>
	
	

 
	


你可能感兴趣的:(openlayers,GIS)