创建包含多边形的叠加层时遇到问题 多条折线。
我想为某些国家创建一个带孔的多边形(显示 哪些区域不受限制)。我这样做是通过创建一个多重的多边形 折线。 创建第一条折线以覆盖地图的整个可见区域。
我从这开始:
绕过一个区域-80 / 180
var outer:Array = [ new LatLng(90, -180),
new LatLng(90, 180),
new LatLng(-90, 180),
new LatLng(-90, -180),
new LatLng(90, -180)]
donut = new Polygon([],
new PolygonOptions({
strokeStyle: new StrokeStyle({
thickness: 0}),
fillStyle: new FillStyle({
color: 0x000000,
alpha: 0.5})
}));
donut.setPolyline(0, outer)
map.addOverlay(donut);
显然这有一个问题,只能跨越一个lat / lng。什么时候 缩小,这不起作用。为了解决这个问题,我试图获得限制 地图,toSpan()和getNorth(),getSouth()等等。这些没有回来 可视地图的真实跨度 - 最大值为180/360。
我的解决方案是使用fromViewportToLatLng()的像素点 map,并将opt_nowrap设置为'true'
var pnw:LatLng = map.fromViewportToLatLng(new Point(0, 0), true)
var pse:LatLng = map.fromViewportToLatLng(new Point(map.width, map.height),
true)
这产生了与此类似的结果
Lat Lng North West (89.77386689378173, -614.3294000000001)
LatLng South East (-89.07253945829217, 370.0455999999999)
从这里我可以正确设置折线(在地图上移动和缩放) 事件)覆盖整个地图,无论经度多少 发生:
outer = [
new LatLng(pnw.lat(), pnw.lng(), true),
new LatLng(pnw.lat(), pse.lng(), true),
new LatLng(pse.lat(), pse.lng(), true),
new LatLng(pse.lat(), pnw.lng(), true),
new LatLng(pnw.lat(), pnw.lng(), true)
]
donut.setPolyline(0, outer)
*到目前为止一切顺利。 * 现在,我想将多边形孔添加到我的多边形,再次添加折线 甜甜圈多边形。
private var australia:Array = [
new LatLng(-9.7716, 143.0241),
new LatLng(-23.4610, 158.1852),
new LatLng(-45.1338, 147.1549),
new LatLng(-35.2615, 111.5153),
new LatLng(-20.6921, 113.0094),
new LatLng(-10.0746, 130.3239),
new LatLng(-9.7716, 143.0241)
]
private var nz:Array = [
new LatLng(-33.5951, 165.8254),
new LatLng(-33.5951, 179.7341),
new LatLng(-48.3845, 179.7341),
new LatLng(-48.3845, 165.8254),
new LatLng(-33.5951, 165.8254)
]
private var hawaii:Array = [
new LatLng(21.8000, -160.4347),
new LatLng(22.5477, -159.7975),
new LatLng(21.4067, -156.3533),
new LatLng(19.5336, -154.4197),
new LatLng(18.6511, -155.6392),
new LatLng(20.6633, -157.8639),
new LatLng(21.8000, -160.4347)
]
donut.setPolyline(1, hawaii)
donut.setPolyline(2, nz)
donut.setPolyline(3, australia)
问题在于子午线在地图视口中可见。这个 问题更加明显,因为圆环孔折线跳起来 从可见视口到拉特长跨度的另一侧。
有时外部阵列甚至无法正确渲染,从而导致圆环 多边形到必要的反转(多边形在国家,而不是 切口)
我意识到这是一个难以想象的。我附上了.as + .fla 文件以防任何人想要测试它。
答案 0 :(得分:0)
所以你试图制作一个大的多边形,其中有澳大利亚,nz,夏威夷的洞,......?你添加折线的代码对我来说似乎不对。我从大广场开始:
var outer:Array = [ new LatLng(90, -180),
new LatLng(90, 180),
new LatLng(-90, 180),
new LatLng(-90, -180),
new LatLng(90, -180)]
donut = new Polygon([outer],
new PolygonOptions({
strokeStyle: new StrokeStyle({
thickness: 0}),
fillStyle: new FillStyle({
color: 0x000000,
alpha: 0.5})
}));
然后添加你的洞
//define au, nz, hi
//...
//the 0th polyline is already the outer edge...
donut.setPolyline(1, hi);
donut.setPolyline(2, nz);
donut.setPolyline(3, au);
现在你dounut是一个有3个洞的大矩形。 然后将其添加到地图中:
map.addOverlay(donut);
我曾经使用过许多在Google地图中穿过半球和经线的多边形,你不必弄乱视口或缩放区域或类似的东西。只要您按照您认为的方式定义多边形,GM就会在任何边界矩形中正确绘制它(即使您放大到目前为止没有多边形边缘可见)。
我看到的另一件事是,你要覆盖整个世界的巨型多边形有点含糊不清:例如90,-180和90,180是相同的点(北极),连接这些坐标的线会长度为0。在墨尔本,有些人在极地做事。是否有可能将其切断89°N?我想这会让你的外部多边形更加快乐。