2011-03-14 121 views
6

我从什么地方提取的国家的轮廓数据,并成功地设法将其转换为纬度和经度坐标的数组,我可以养活到谷歌地图API绘制折线或多边形。谷歌地图多边形优化

的问题是,存在这样的形状约1200+点。它在Google地图中完美呈现,但我需要将点数从1200减少到100以下。我不需要非常流畅的轮廓,我只需要扔掉我可以不用的点。任何算法或可以帮助我减少点数的在线工具都是必需的。

+0

你需要做的这一次?你也使用任何一种可能有空间扩展的数据库? – 2011-03-14 13:13:28

+0

@Argiropoulos Stavros:只有一次。没有涉及数据库;它只是一个HTML/JavaScript页面。如果数据库有帮助,那么我可以将数据导入MySQL 5.1数据库并执行您所建议的任何操作。 – 2011-03-14 13:26:37

+0

搜索“编码折线”。它会将你的1200+分减少到40个字节的字符串 – 2011-03-14 17:16:46

回答

4

我觉得MapShaper可以做到这一点在线

否则,实现一些algorithm

+0

解释负面评分被认为是礼貌的;我提供了一个链接到一个在线工具,可以做到所要求的。 – Unreason 2011-03-14 13:28:26

+0

我可以从地图整形器生成的“shp”文件中提取坐标信息吗? – 2011-03-14 13:32:10

+0

对不起,在那个时刻没有时间做比罢了。其解释是,提供一种工具(以及实施“某种算法”的模糊建议)似乎是无益的,因为它似乎是解决方案的一个问题。现在,OP澄清了他不需要编程,但只做了一次,只要系统允许我立即撤销downvote。 – 2011-03-14 14:05:52

0

最有可能你想要什么给点分成2半,并想尝试一下我的JavaScript函数:

function shortenAndShow (polyline, color) { 
    var dist = 0, copyPoints = Array (); 
    for (var n = 0, var end = polyline.getVertexCount () - 1; n < end ; n++) { 
    dist += polyline.getVertex (n).distanceFrom (polyline.getVertex (n +1)); 
    copyPoints.push (polyline.getVertex (n)); 
    } 
    var lastPoint = copyPoints [copyPoints.length-1]; 
    var newLine = new GPolyline (copyPoints, color, 2, 1); 
    gmap2.addOverlay (newLine); 
} 
1

如果您可以安装postgis,我认为这很容易,因为他们提供了一个安装程序,那么您可以导入数据并执行snaptogrid()st_simplify(),但我无法在其中找到等价物mysql.If你决定去postgis,我建议,因为它会帮助你的道路,我可以为你提供的细节。

现在对于一个简单的自定义解决方案可以通过削减或倒圆一些COORDS的最后一位数字缩小尺寸,然后合并在一个简单的snaptogrid实际上导致相同COORDS()。

希望它有帮助

+0

将尝试扩展名。 – 2011-03-14 14:05:37

6

找到Bill Chadwick的这个简单的JavaScript。只需将LatLng提供给一个数组并将其传递给函数中的源参数Douglas Peucker line simplification routine

它将输出一个数组,其中多边形的点数较少。

var ArrayforPolygontoUse= GDouglasPeucker(theArrayofLatLng,2000) 
var polygon=new google.maps.Polygon({ 

    path:ArrayforPolygontoUse, 
    geodesic:true, 
    strokeColor:"#0000FF", 
    strokeOpacity:0.8, 
    strokeWeight:2, 
    fillColor:"#0000FF", 
    fillOpacity:0.4, 
    editable:true 
    }); 

theArrayofLatLng是您使用Google Maps API收集的latlng数组。 2000年的价值扭曲在米。我的假设是,价值越高,更多的点将被删除作为输出。

对于真正的初学者: 请确保您使用它之前声明你的HTML页面上的JS文件。 :)

<script type="text/javascript" src="js/GDouglasPeucker.js"></script> 
+0

你应该尝试在你的答案中包含最核心的代码片段,并解释他们为什么(或任何算法)解释答案。 – 2013-02-06 18:58:59

+0

感谢您的建议纳撒尼尔。编辑它。 – Quchie 2013-02-07 03:35:05

0

我同意了非理性的anwser,该网站支持GeoJSON的,我用它在我的网站,它砍下我的GeoJSON的,但我想你也需要这个world country geo Json

+0

链接只回答应该是评论 – NSNoob 2016-02-25 07:22:39

+0

@NSNoob是的,我想评论非理由,但我没有50个声望 – Sun 2016-02-25 08:24:08