我从某处提取了国家/地区大纲数据并成功设法将其转换为lat-lng坐标数组,我可以将其提供给Google maps API以绘制折线或多边形。
问题在于该形状中有大约1200个点。它在Google地图中完美呈现,但我需要将点数从1200减少到不到100.我不需要非常平滑的轮廓,我只需要扔掉我可以不用的点数。需要任何可以帮助我减少点数的算法或在线工具。
答案 0 :(得分:7)
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>
答案 1 :(得分:4)
答案 2 :(得分:1)
如果您可以安装我认为很容易的postgis,因为他们提供了安装程序,那么您可以导入数据并执行snaptogrid()或st_simplify(),我无法在mysql中找到相应的内容。如果您决定与postgis一起推荐,因为它可以帮助你在路上我可以为你提供详细信息。
现在,对于一个简单的自定义解决方案,您可以通过剪切或舍入一些最后一个数字的坐标来缩小尺寸,然后合并相同的坐标,实际上是一个简单的snaptogrid()。
希望有所帮助
答案 3 :(得分:0)
很可能你想把这些点分成两半,并想尝试我的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 );
}
答案 4 :(得分:0)
我同意Unreason的anwser,网站支持GeoJson,我在我的网站上使用它,它减少了我的geoJson,但我认为你还需要这个world country geo Json
答案 5 :(得分:0)
我一直在寻找相同的东西,却发现Simplify.js。它完全可以满足您的需求,并且易于使用。您只需传递您的坐标,它将删除所有多余的点。
@RequestMapping(value = "/SaveData", method = RequestMethod.POST)
public @ResponseBody String saveData(@RequestBody String value,@Valid @RequestBody EmployeeData emp, BindingResult result) {
System.out.println(" Creating!!!");
//logic here
}
simplify(points, tolerance, highQuality)
参数应包含格式为points
的坐标数组。 (之后,您可以将其转换回所需的格式。)
{x: 123, y: 123}
应该是decimal degrees中的精度。例如。 tolerance
达11米。增加此数字将减小输出大小。
如果您不介意等待几毫秒,请将0.0001
设置为highQuality
以获得更好的结果。