标题基本上都说明了一切.我需要使用Python计算地球表面多边形内的区域.计算由地球表面任意多边形包围的区域说明了一些内容,但对技术细节仍然模糊:
如果你想用更"GIS"的味道来做这件事,那么你需要为你的区域选择一个度量单位,找到一个保留区域的适当投影(不是所有的).既然你在谈论计算任意多边形,我会使用类似Lambert Azimuthal等面积投影的东西.将投影的原点/中心设置为多边形的中心,将多边形投影到新坐标系,然后使用标准平面技术计算面积.
那么,我如何在Python中执行此操作?
标准凸包算法不适用于(经度,纬度)点,因为标准算法假设您需要一组笛卡尔点的船体.纬度 - 经度点不是笛卡尔坐标,因为经度在反子午线(+/- 180度)处"环绕".即,经度179以东两度是-179.
因此,如果您的一组点恰好跨越反子午线,您将计算出错误地在世界各地伸展的虚假船体.
我可以使用标准凸包算法来解决这个问题的任何建议,或指向正确的"地球"船体算法?
现在我想起来,有更多有趣的案例需要考虑而不是跨越反梅迪安.考虑一个包围地球的点"带" - 它的凸包将没有东/西边界.或者甚至更进一步,{(0,0),(0,90),(0,-90),(90,0),( - 90,0),(180,0)}的凸包是什么? - 它似乎包含整个地球表面,所以它的周边有哪些点?
geometry geospatial latitude-longitude convex-hull computational-geometry
给定一系列GPS坐标对,我需要计算多边形的面积(n-gon).这相对较小(不大于50,000平方英尺).通过对来自世界文件的数据应用仿射变换来创建地理编码.
我试图通过将地理编码转换为笛卡尔坐标来使用两步法:
double xPos = (lon-lonAnchor)*( Math.toRadians( 6378137 ) )*Math.cos( latAnchor );
double yPos = (lat-latAnchor)*( Math.toRadians( 6378137 ) );
Run Code Online (Sandbox Code Playgroud)
然后我使用叉积计算来确定面积.
问题是结果的准确性有点偏差(约1%).我有什么可以改进的吗?
谢谢.
我想计算一个大学项目的地图片段中绘制的多边形的数量.
这就是我画多边形的方法.
@Override
public void onMapClick(LatLng point) {
//tvLocInfo.setText("New marker added@" + point.toString());
map.addMarker(new MarkerOptions().position(point).draggable(true).title(point.toString()));
markerClicked = false;
}
@Override
public void onMapLongClick(LatLng point) {
//tvLocInfo.setText("New marker added@" + point.toString());
map.clear();
}
@Override
public boolean onMarkerClick(Marker marker) {
if(markerClicked){
if(polygon != null){
polygon.remove();
polygon = null;
}
polygonOptions.add(marker.getPosition());
polygonOptions.strokeColor(Color.RED);
polygonOptions.fillColor(Color.BLUE);
polygon = map.addPolygon(polygonOptions);
//Area = google.maps.geometry.spherical.computeArea(polygon.getPath().getArray());
}else{
if(polygon != null){
polygon.remove();
polygon = null;
}
polygonOptions = new PolygonOptions().add(marker.getPosition());
markerClicked = true;
}
Run Code Online (Sandbox Code Playgroud)
我已经看到了如何计算区域的代码,但我不确定如何在我的应用程序中实现它并计算多边形的面积.
我使用此代码计算Android的GPS区域:
private static final double EARTH_RADIUS …Run Code Online (Sandbox Code Playgroud) geometry ×2
geospatial ×2
android ×1
area ×1
convex-hull ×1
geocoding ×1
geolocation ×1
google-maps ×1
map ×1
polygon ×1
python ×1