Algorithm 谷歌地图多边形优化

Algorithm 谷歌地图多边形优化,algorithm,google-maps,polygon,Algorithm,Google Maps,Polygon,我从某处提取了国家轮廓数据,并成功地将其转换为一组lat lng坐标,我可以将其输入到Google maps API以绘制多段线或多边形 问题是这个形状中大约有1200多个点。它在谷歌地图中呈现得非常完美,但我需要将点数从1200减少到100以下。我不需要一个非常平滑的轮廓,我只需要扔掉那些我可以不需要的要点。任何可以帮助我减少分数的算法或在线工具都是必需的。我认为可以在线做到这一点 否则,实现一些,很可能是您想要将点分成两半并想要尝试我的Javascript函数: function short

我从某处提取了国家轮廓数据,并成功地将其转换为一组lat lng坐标,我可以将其输入到Google maps API以绘制多段线或多边形

问题是这个形状中大约有1200多个点。它在谷歌地图中呈现得非常完美,但我需要将点数从1200减少到100以下。我不需要一个非常平滑的轮廓,我只需要扔掉那些我可以不需要的要点。任何可以帮助我减少分数的算法或在线工具都是必需的。

我认为可以在线做到这一点


否则,实现一些

,很可能是您想要将点分成两半并想要尝试我的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 );
} 
函数缩写显示(多段线,颜色){
var dist=0,copyPoints=Array();
对于(var n=0,var end=polyline.getVertexCount()-1;n
如果你可以安装postgis,我认为这很容易,因为他们提供了安装程序,那么你可以导入数据并执行,或者我在mysql中找不到类似的数据。如果你决定使用postgis,我推荐它,因为它将帮助你,我可以向你提供详细信息

现在,对于一个简单的自定义解决方案,您可以通过剪切或舍入坐标的最后一些数字来减小大小,然后合并相同的坐标,从而生成一个简单的snaptogrid()


希望这对找到Bill Chadwick的这个简单javascript有所帮助。只需将LatLng馈送到数组中,并在此处传递到函数中的源参数

它将输出一个多边形点数较少的数组

 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
  });
ArrayOflatlng是一个使用谷歌地图api收集的latlng数组。 2000值以米为单位。我的假设是,值越高,作为输出删除的点数越多

对于真正的初学者: 在使用js文件之前,请确保在html页面上声明该文件。:)



我同意Unreason的anwser,该网站支持GeoJson,我在我的网站中使用了它,它减少了我的GeoJson,但我想你也需要这个

我正在寻找完全相同的东西并找到了它。它可以完全满足你的需要,而且非常容易使用。您只需输入坐标,它将删除所有多余的点

简化(点、公差、高质量)
points
参数应该包含一个坐标数组,格式为
{x:123,y:123}
。(之后,您可以将其转换回所需的格式。)

公差应为中的精度。例如,11米的
0.0001
。增加此数字将减小输出大小


如果您不介意再等待几毫秒,请将
highQuality
设置为
true
,以获得更好的结果。

您需要这样做一次吗?您是否使用任何可能具有空间扩展的数据库?@Argiropoulos Stavros:仅一次。没有涉及数据库;它只是一个html/javascript页面。如果数据库有帮助,那么我可以将数据导入MySQL 5.1数据库,并执行您建议的任何操作。它将把你的1200+点减少到40字节的stringPotrace,虽然我怀疑这不是你想要的地图数据。尽管如此,Inkscape在简化命令中很好地实现了postrace;我提供了一个在线工具的链接,该工具可能会执行要求的操作。我可以从地图整形器生成的“shp”文件中提取坐标信息吗?对不起,当时没有时间做更多的向下投票。解释是,提供一个工具(以及一个实现“某些算法”的模糊建议)来解决一个似乎是关于如何编程解决方案的问题似乎是无济于事的。既然OP澄清了他不需要编程,但只需要做一次,我会在系统允许的情况下立即撤回否决票。@Salman A,AFAIK,是的,您可以使用shp2pgsql将其导入PostGis,例如实现了“Douglas Peucker线简化算法”将1200分降低到70分。你应该尝试在答案中包含最核心的代码片段,并解释它们(或任何算法)解释答案的原因。感谢Nathaniel的建议。已编辑。仅链接答案应为comments@NSNoob是的,我想评论这篇文章的不合理之处,但我没有50种声誉
<script type="text/javascript" src="js/GDouglasPeucker.js"></script>