昨天我想检查一个点是否在多边形内,发现了这个很棒的脚本:https://github.com/tparkin/Google-Maps-Point-in-Polygon
但是今天在工作时我被告知我们的客户需要检查一个多边形是否在另一个多边形内部。我想知道是否有一个公式可以让我采用两个坐标(而不是一个来检查点),并从这两个坐标生成一个矩形并检查该矩形是否在多边形内。
我不知道我是否在问一个愚蠢的问题(高中老师曾经说过“没有愚蠢的问题,只有不问的傻瓜”),但如果你完全不明白我的意思但只是一点,如果你能告诉我从哪里开始,我将不胜感激。
首先使用脚本检查多边形中的一个角点是否位于另一个多边形内部。然后检查多边形中的任何直线是否与另一个多边形中的任何直线相交。如果没有,则该多边形位于另一个多边形内部。
多边形是凸的吗?因为,如果是的话,您可以为“矩形”的两个“角”运行“多边形中的点”脚本。如果两个角都在里面,并且多边形没有向内的“曲线”,那么整个矩形不就在里面了吗?
也许这部分代码可以帮助你:
package com.polygons;
import java.awt.Point;
import java.awt.Polygon;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.collections.CollectionUtils;
/**
* Utility to Manipulate Polygons
*
* @author fernando.hernandez
*
*/
public class PolygonUtils {
/**
* Check if polygon2 is inside polygon to polygon1
* @param polygon1 polygon that contains other
* @param polygon2 polygon that is inner to other
* @return true if polygon2 is inner to polygon1
*/
public boolean isInsidePolygon(Polygon polygon1, Polygon polygon2){
//all points in inner Polygon should be contained in polygon
int[] xpoints = polygon2.xpoints;
int[] ypoints = polygon2.ypoints;
boolean result = true;
for (int i = 0, j = 0; i < polygon2.npoints ; i++,j++) {
result = polygon1.contains(new Point(xpoints[i], ypoints[j]));
if(!result) break;
}
return result;
}
}
我必须找到类似的解决方案。这是我到目前为止所拥有的:
array[pol1cords[cord1,cord2...],pol2cords[cord1,cord2...],..]
google.maps.geometry.poly.containsLocation(latLng, pol)
true
计数器会上升我的算法看起来像这样:
""区(3级)->区(2级)->VDC(1级)"" vdcs = getVDCs(); -> 以数组形式给出 vdc,其中包含名称、id 和多边形坐标 zone = getZones(); -> 在数组中给出区域,其中包含名称、ID 和 多边形坐标
foreach(zones as zone){
drawPolygon(zone[coordinates]);
foreach(vdcs as vdc){
foreach(vdc[coordinates] as coordinate){
result = checkLocation(zone, coordinate);
if(result) counter++;
}
if(counter = vdc[coordinates].length){writeConsole(vdc_id+"true in"+zone_id)}
}
}