Javascript 如何找到给定坐标的面积?
如何找到给定坐标的面积? 要求: 我在地图上有一个多边形坐标,然后我们要找到多边形的面积,单位是公顷和英亩 坐标以十进制度数表示,区域应以十进制度数表示 我们可以转换公顷和英亩,请告诉我 坐标是Javascript 如何找到给定坐标的面积?,javascript,jquery,leaflet,Javascript,Jquery,Leaflet,如何找到给定坐标的面积? 要求: 我在地图上有一个多边形坐标,然后我们要找到多边形的面积,单位是公顷和英亩 坐标以十进制度数表示,区域应以十进制度数表示 我们可以转换公顷和英亩,请告诉我 坐标是 (10.072642780669105,76.3268655538559),(10.078051232146612,76.32986962795258]),(10.073530110959743,76.33390367031097) 代码 arr=[[10.075854059674523,76.328
(10.072642780669105,76.3268655538559),(10.078051232146612,76.32986962795258]),(10.073530110959743,76.33390367031097)
代码
arr=[[10.075854059674523,76.32832467556],
[10.079825860518895, 76.33338868618011],
[10.076234340596953, 76.33806645870209],
[10.07065684212598, 76.33806645870209],
[10.068924417668397, 76.33175790309906] ];
var总和=0;
对于(var i=0,l=arr.length-1;i它非常复杂,不完全是数学。
如果你想得到真实世界的结果,而不是一些数学理论,你必须注意到地球不是球体——在谷歌上寻找WGS 84
蒙特卡洛算法是一种可以快速实现的算法:
找到多边形的最小边界框(对于小区域,可以将地球处理为平面)
计算矩形S=a*b的MBB面积
在矩形内获取N个随机点
查找多边形内的M=点
多边形的曲面为S*M/N
增加N可以提高精度
您应该很容易找到解决每个步骤的算法(查找从一个地理点到另一个地理点的距离,检查点x/y是否在图中)多边形区号与其他地理点相比非常好
问题是你有平方度
嗯,对于小块土地来说,地球可以被认为是平坦的,要把平方度转换成公顷、英亩或平方米,你需要知道一个度有多长
在赤道,地球上的一度是地球周长的1/360,即2*Pi*Rearth或~40000km
1度约为40000公里的1/360=每度约111公里
1km等于1000m。1km^2=10^6m^2。但是1hm2=10000m^2,所以1km^2等于100公顷
平方度约为(111^2 km^2)(100公顷/km^2)~=1232100公顷
啊,但我作弊了,这只在赤道附近有效
地球的周长略大于40000公里,而且当你接近极点时,经度也会变短。从极点到极点,纬度N或S始终是地球周长的1/360,但赤道处的经度最宽,随着cos(纬度)的增加,经度会变窄
理想情况下,您需要一个库来为您进行转换
这实际上取决于你在世界上的位置以及你想要达到的精确程度。请记住,陆地既不是平坦的,也不一定与下面的球体对齐
我所在的公司负责从空中喷洒蕨类植物,并绘制喷洒地点的地图,绘制在精确到一两米的军械测量地图上
在英国,你可能会发现这些很有用,它们详细说明了这些转换的复杂性,我甚至不打算在这里进行总结
军械调查局似乎没有我在他们的网站上学到的旧转换文件,但我在这里找到了一份副本。
这个问题似乎离题了,因为它是关于数学的,它取决于球体的半径。如果有JavaScript库,可能不会离题?如果这是用户想要的,应该在问题中指出。@Paul半径似乎是地球半径(大约6.370.000米)这个问题似乎离题了,因为它是关于GIS的。在GIS.stackexchange.com.Erm上提问,你是否打算在某个点上给出M的公式?并描述如何将球坐标转换为平面多边形?在谷歌中,我们可以识别:computed_acres=(google.maps.geometry.sphereal.computeArea(points_array)/(1000*1000)*这将在传单中使用,请帮助我。。。。
arr=[ [10.075854059674523, 76.32832467556],
[10.079825860518895, 76.33338868618011],
[10.076234340596953, 76.33806645870209],
[10.07065684212598, 76.33806645870209],
[10.068924417668397, 76.33175790309906] ];
var sum=0;
for(var i=0,l=arr.length-1;i<l;i++){ sum+=(arr[i][0]*arr[i+1][1]-arr[i+1][0]*arr[i][1]); }
alert('The Area of Ploygon is:'+(sum/2));