如何获取地图坐标并将其反转,使它们遵循KML标准? (lat / lon vs lon / lat)

时间:2013-01-12 21:05:05

标签: google-maps google-maps-api-3 kml

我的地图可让用户绘制与最近道路对齐的坐标。我捕获生成的折线并将它们存储在融合表中。

现在我想检索这些折线坐标并在地图上显示。

当我在融合表中有以下内容时,它会正确映射:

<LineString><coordinates>-93.2817792892456,37.20134698578519 -93.28178000000001,37.201420000000006 -93.27869000000001,37.2014 -93.27869000000001,37.2014 -93.27813,37.2014</coordinates></LineString>

但不幸的是,Map输入正在捕获更像这样的东西:

<LineString><coordinates>(37.20134698578519,-93.2817792892456),(37.201420000000006,-93.28178000000001),(37.2014,-93.27869000000001),(37.2014,-93.27869000000001),(37.2014,-93.27813)</coordinates></LineString>

我的问题是,是否要解决这个问题,我需要解析这个字符串,使其符合可接受的格式,或者如果我遗漏了某些东西,并且有一种更容易接受的方式。

Jsfiddle is here。如果您绘制一些折线,您可以单击“清除”控件以获取显示坐标的警报,也可以双击以结束折线图,这将显示一个信息框,其中“位置”字段已预先填充最终在融合表中的坐标。

This is the fusion table。像'scce'和'scenic'这样的记录在地图上正确显示。但像'曲折/新格式'这样的记录却没有。

对此的任何见解都将受到高度赞赏。谢谢你的期待。

1 个答案:

答案 0 :(得分:2)

Google Maps API使用google.maps.LatLng objects。当转换为字符串时,坐标的顺序为&#34;纬度,经度&#34;。

KML format使用相反的顺序:

<coordinates>longitude1,latitude1 longitude2,latitude2</coordinates> 

(也允许可选的第三个&#34;高度&#34;坐标)

更改代码,以正确的顺序输出坐标,不带括号

改变这个:

  geolines=escape("<LineString><coordinates>")+poly.getPath().getArray().toString().replace(/([\s]+)/g, '')+escape("</coordinates></LineString>") ;

要:

  geolines=escape("<LineString><coordinates>");
  var path = poly.getPath();
  var length = path.getLength();
  for (var i=0; i < length; i++) {
    geolines += path.getAt(i).lng()+","+path.getAt(i).lat()+" ";
  }
  geolines+= escape("</coordinates></LineString>");

(未经测试)