我正在创建一个java程序,将一组lat / lng坐标分类为自定义大小的特定矩形,因此实际上,将地球表面映射到自定义网格中,并能够识别哪个矩形/多边形一点在于。
我正在研究的方法是使用地图投影(可能是墨卡托)。
例如,假设我想将long / lat分类为100m x 100m的'square',
44.727549,10.419704和44.727572,10.420460将归类为X区
和
44.732496,10.528092和44.732999,10.529465将分类为区域Y,因为它们相距100米。 (这假设它们当然位于同一边界内)
我不太担心失真,因为我不需要显示地图,但我需要能够分辨出一组坐标属于哪个多边形。
这可能吗?欢迎任何建议。谢谢。
修改
忽略杆的投射也是可接受的损失
答案 0 :(得分:4)
这是我的最终解决方案(在PHP中),为每平方米100米创建一个bin:
function get_static_pointer_table_id($lat, $lng)
{
$earth_circumference = 40000; // km
$lat_bin = round($lat / 0.0009);
$lng_length = $earth_circumference * cos(deg2rad($lat));
$number_of_bins_on_lng = $lng_length * 10;
$lng_bin = round($number_of_bins_on_lng * $lng / 360);
//the 'bin' unique identifier
return $lat_bin . "_" . $lng_bin;
}
答案 1 :(得分:1)
如果我理解正确,您正在寻找
问题1是使用正方形不可能执行的任务,但使用多边形则不太可能。创建多边形的一种非常简单的方法是使用坐标本身。如果每个多边形在纬度和经度上都是0.0009°,那么在赤道上将有大约100m×100m的方格,放置的切片将变得非常接近极点。
问题2取决于用于解决上述挑战的近似值。如果你使用上面非常简单的方法,那么将每个坐标放入一个bin只是除以0.0009(并向下舍入到最接近的整数)。
所以,首先你必须决定你可以妥协。在多边形中具有相等的面积,相等的纵向距离,相等的纬度距离等是否重要?在多边形中有四个角是很重要的吗?在靠近极点并靠近赤道附近有类似或几乎相似的多边形是否重要?一旦了解了应用程序设置的限制,选择投影就会变得更容易。
答案 2 :(得分:1)
这里你要做的是投影到椭圆体的平面上。所以只要你的点靠近在一起,而且,你不介意得到稍微错误的答案,你可以假设你的投影平面在你的点集合的中心相交,并且每个纬度和经度都是恒定的米数。那么问题就是简单的平面计算。
当然,这是错误的。我实际上建议您查看地图投影,选择一个有意义的投影,并为此而努力。请记住,您可以将投影的中心移动到中心到您的点集,这将减少失真。
我怀疑PROJ.4在图书馆方面可能对你有所帮助。还必须有一个好的Java,但这不是我的专长。
最后你可以假设地球是一个球体并在球体上进行计算。或者,如果你真的想要做对,你可以选择一个标准的地球椭球并对其进行计算。