- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个纬度/经度坐标列表,我想用它来计算多边形的面积。在很多情况下我可以得到精确的结果,但是多边形越大,出错的可能性就越大。
我首先使用 http://www.ibm.com/developerworks/java/library/j-coordconvert/ 将坐标转换为 UTM
从那里,我正在使用 http://www.mathopenref.com/coordpolygonarea2.html计算UTM坐标的面积。
private Double polygonArea(int[] x, int[] y) {
Double area = 0.0;
int j = x.length-1;
for(int i = 0; i < x.length; i++) {
area = area + (x[j]+x[i]) * (y[j]-y[i]);
j = i;
}
area = area/2;
if (area < 0)
area = area * -1;
return area;
}
我将这些区域与输入到 Microsoft SQL Server 和 ArcGIS 中的相同坐标进行比较,但我似乎无法始终完全匹配它们。有谁知道比这更精确的方法吗?
提前致谢。
编辑 1
感谢您的评论。这是我获取区域的代码(CoordinateConversion 代码在上面的 IBM 链接中列出):
private Map<Integer, GeoPoint> vertices;
private Double getArea() {
List<Integer> xpoints = new ArrayList<Integer>();
List<Integer> ypoints = new ArrayList<Integer>();
CoordinateConversion cc = new CoordinateConversion();
for(Entry<Integer, GeoPoint> itm : vertices.entrySet()) {
GeoPoint pnt = itm.getValue();
String temp = cc.latLon2MGRUTM(pnt.getLatitudeE6()/1E6, pnt.getLongitudeE6()/1E6);
// Example return from CC: 02CNR0634657742
String easting = temp.substring(5, 10);
String northing = temp.substring(10, 15);
xpoints.add(Integer.parseInt(easting));
ypoints.add(Integer.parseInt(northing));
}
int[] x = toIntArray(xpoints);
int[] y = toIntArray(ypoints);
return polygonArea(x,y);
}
这是点的示例列表:
44.80016800 -106.40808100
44.80016800 -106.72123800
44.75016800 -106.72123800
44.75016800 -106.80123800
44.56699100 -106.80123800
在 ArcGIS 和 MS SQL Server 中,我得到了 90847.0 英亩。使用上面的代码,我得到了 90817.4 英亩。
另一个点列表示例:
45.78412600 -108.51506700
45.78402600 -108.67972100
45.75512200 -108.67949400
45.75512200 -108.69962300
45.69795400 -108.69929400
在 ArcGIS 和 MS SQL Server 中,我获得了 15732.9 英亩的土地。使用上面的代码,我得到了 15731.9 英亩。
最佳答案
您使用的面积公式仅在平面上有效。随着多边形变大,地球的曲率开始产生影响,使面积大于您使用此公式计算的面积。您需要找到适用于球体表面的公式。
在 Google 上简单搜索“球面上的多边形面积”会出现一堆结果,其中最有趣的是 Wolfram MathWorld Spherical Polygon。
关于java - 使用UTM坐标计算面积的精确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10905401/
我目前正在开展一个项目,我们必须根据两个(用户输入)点的已知位置找出一个点的位置。 现在的问题是用户可以在不同的 UTM 区域中提供两个点,因此我们必须将其中一个点投影到另一个系统(至少我们是这样做的
我找到了一个相当简单的例子来说明如何做到这一点,但我无法让它为我工作。我对 R 很陌生 library(rgdal) xy <- cbind(c(118, 119), c(10, 50)) proje
我想开始跟踪电子邮件访问,为他们提供使用 GA 事件参数的电子邮件媒介 但是我对长 utm 链接参数不满意;它们不美观,也容易被不当分享,因为许多人在查看页面后复制和粘贴链接时不会花时间删除它们。 有
我们运行一个 WP 站点,目前我们的页脚中有一个传递 UTM 参数的脚本。 var querystring = '?utm_source=[utm_source]&utm_medium=[utm_me
有人可以看到这有什么问题吗: library(rgdal) # Make a two-column matrix, col1 = long, col2 = lat xy UTM,我们在Stack O
我们知道 Google Analytics 在所有电子商务导航期间都会跟踪 url 上存在的 UTM 参数。 我在分析文档中找不到的一件事是: 谷歌分析是否会在交易完成后重置 UTM 参数? 以以下用
我正在运行一个自托管的 wordpress 站点,并且我正在尝试根据 utm 代码中的参数来定制用户看到的次要内容。我所做的只是 用于测试 UTM 婴儿车或字符串变量以显示一个小部件与另一个小部件。在
我有谷歌分析帐户,我在我的index.html中添加了分析代码。但谷歌分析中的 Mycampaign 标签没有显示任何数据。我有用户 google URL 生成器来生成事件 URL。可能是什么问题?
Google 似乎不喜欢在查询字符串参数中以纯文本形式传递电子邮件(他们联系了网站所有者,提及不要在查询字符串参数中以纯文本形式传递电子邮件)。 我们询问支持人员以 base64 编码电子邮件 (bt
我们确实有一些营销事件(Google、facebook...),当用户到达登陆页面 (abo.mysite.com) 时,他确实拥有 utm 参数 utm_source=theCampaignSour
我需要使用 python 中的 utm 模块获取一组以米为单位的坐标,给定纬度/经度位置。如果位置跨越不同区域, map 就会变得不正确。在检查了一些讨论后,我还没有找到直接的解决方案。 lat_po
关闭。这个问题需要更多 focused .它目前不接受答案。 想要改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭3年前。 Improve this que
我有一个电子邮件事件,我试图用谷歌分析来跟踪,但由于某种原因,来源、事件等没有被跟踪。 我使用的网址是: https://makemeacocktail.com/list/14911/wimbledo
我发布了许多新闻链接,这些新闻链接都指向外部资源/网站,但我不确定是否有必要在这些链接中添加自定义广告系列参数(谷歌分析; utm)。是否可以在不将人们吸引到我的网站的链接上进行任何形式的跟踪? 最佳
我想知道我是否以正确的方式构建了这个谷歌分析查询。我不确定“utmcc”部分。 0 => string 'http://www.google-analytics.com/__utm.gif?utm
如果用户自带utm值到着陆页 http://example.com/landing.php?utm_source=Facebook&utm_medium=Marketing&utm_term=FbAd
我是谷歌分析和 UTM 参数的新手,我认为这是一个相当简单的问题。 我已经阅读并了解什么是 UTM 参数以及 GA 如何使用它们,但是除了在默认布局页面中包含通用 GA javascript 之外,我
如何使用 UTM 跟踪链接让 Firebase 了解并跟踪应用(iOS 和 Android)的安装(例如,我想通过页脚链接跟踪我网站上应用的安装)?在 GA 中它运行完美。 在 Firebase 中,
一段时间以来,我一直在收集 UTM 参数并使用这些值成功填充表单字段。如果我的 utm_source 为空,我不想默认为空值或空值,而是想为“网站”的 utm_source 提供默认值 这是我的代码:
这个问题在这里已经有了答案: How to convert from UTM to LatLng in python or Javascript (13 个答案) 关闭 6 年前。 有没有办法转换U
我是一名优秀的程序员,十分优秀!