Google maps api 3 如何从kml设置形状编辑器
我在我的地图api中加载了一个kml文件,我在点击事件中使用了这段代码Google maps api 3 如何从kml设置形状编辑器,google-maps-api-3,kml,polygon,Google Maps Api 3,Kml,Polygon,我在我的地图api中加载了一个kml文件,我在点击事件中使用了这段代码 google.maps.event.addListener(ctaLayer, 'click', function (kmlEvent) { setSelection(kmlEvent.featureData.name); //alert(kmlEvent.featureData.name); //showInContentWindow(text
google.maps.event.addListener(ctaLayer, 'click', function (kmlEvent) {
setSelection(kmlEvent.featureData.name);
//alert(kmlEvent.featureData.name);
//showInContentWindow(text);
});
这叫做函数
function setSelection(shape) {
clearSelection();
selectedShape = shape;
shape.setEditable(true);
}
不,我有两个问题,KML文件给了我两个多边形,每个多边形都有不同的名称。
测试仪和jahoor。但当我点击jahoor时,它总是给我多边形测试器。
为什么我不能选择它们彼此不同
第二个问题是,我无法再次从kml设置多边形可编辑。
它给了我一个错误:未捕获类型错误:Object Tester没有“setEditable”方法
有人知道我做错了什么吗?可以在堆栈上或谷歌api的文档中找到它
kml文件的一部分:
<Placemark id="Tester">
<styleUrl>#transYellowPolyActive</styleUrl>
<name>Tester</name>
<Polygon>
<outerBoundaryIs>
<LinearRing>
<tessellate>0</tessellate>
<coordinates> 6.30889892578125,53.28820543193896 6.29791259765625,53.28410053532493 6.233367919921875,53.21096737507053 6.5093994140625,53.19698389904798 6.50390625,53.27096221595853
</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
<Placemark id="jahoor">
<styleUrl>#transYellowPolyActive</styleUrl>
<name>jahoor</name>
<Polygon>
<outerBoundaryIs>
<LinearRing>
<tessellate>0</tessellate>
<coordinates> 6.168479919433594,53.30318495818702 6.143760681152344,53.29579845109269 6.138267517089844,53.27281003615208 6.195259094238281,53.2707568976735 6.2010955810546875,53.29867113343524
</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
KmlLayer中的多边形无法进行编辑,它们被渲染为平铺,而不是本地多边形。如果使用第三方KML解析器(如或)将它们呈现为本机Google Maps Javascript API v3多边形,则可以使其可编辑。但请注意,这将比基于平铺的渲染效率低,特别是对于复杂多边形或大量多边形 如果我修改您的kml使其有效:
<kml>
<Document>
<Placemark id="Tester">
<styleUrl>#transYellowPolyActive</styleUrl>
<name>Tester</name>
<Polygon>
<outerBoundaryIs>
<LinearRing>
<tessellate>0</tessellate>
<coordinates> 6.30889892578125,53.28820543193896 6.29791259765625,53.28410053532493 6.233367919921875,53.21096737507053 6.5093994140625,53.19698389904798 6.50390625,53.27096221595853
</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
<Placemark id="jahoor">
<styleUrl>#transYellowPolyActive</styleUrl>
<name>jahoor</name>
<Polygon>
<outerBoundaryIs>
<LinearRing>
<tessellate>0</tessellate>
<coordinates> 6.168479919433594,53.30318495818702 6.143760681152344,53.29579845109269 6.138267517089844,53.27281003615208 6.195259094238281,53.2707568976735 6.2010955810546875,53.29867113343524
</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
</Document>
</kml>
并将其粘贴到
然后单击parse KML进行映射,它会给我两个可编辑的多边形
或者只需单击parse KML映射到错误对象Tester没有方法“setEditable”,可能是因为您调用Tester构造函数时没有使用新的方法。另一个听起来像是闭包问题,但是没有代码很难说。你能解释一下你的意思吗?请注意:您的对象测试仪显然已定义。否则,您将得到关于未定义对象的错误。它似乎没有正确初始化。例如,原因可能是您没有调用new name.pkg.Tester,而只是调用name.pgk.Tester。这只是一个猜测。它给了我一个新的错误:uncaughttypeerror:string不是函数。你能显示相关的代码吗?没有它很难帮助。嗨,我的kml是有效的,你在我的问题中看到的是它的一部分。。因此,如果我想更改我的kml多边形,我需要创建一个与geoxml一起工作的新系统?如果kml不太复杂,这是实现目标的一种方法。您可以使用FusionTables/FusionTablesLayer也可以使用FusionTablesLayer显示不可编辑的多边形,例如geoxml3将KML解析为需要修改的本地可编辑多边形。按照我的方法,用户可以绘制多边形,填写数据库中弹出框中的某些字段。然后api打开包含数据库数据的kml generetad文件,并返回地图上的te多边形。但是当用户单击多边形时,我需要它是可编辑的。然后我建议您从数据库中获取多边形的数据,并在用户想要编辑它时使用它生成可编辑的多边形。原生Google Maps Javascript API v3多边形将显示在KmlLayer上方。