java编码确定点是否位于多边形(矩形)内部的解决方案

标签 java android latitude-longitude

我正在阅读 website 中的解决方案 3 (2D)并试图将其翻译成java代码。 java是否正确请评论。我使用的是纬度和经度坐标,而不是 x 和 y 坐标(注意:loc.getLongitude(),loc.getLatitude() 是要检查的点集,如果在矩形内部并且给定的坐标( double )不是真实坐标还没有。

        double lat0 = 0.2;
        double long0 = 0.3;
        double lat1 = 1.2;
        double long1 = 1.3;
        double lat2 = 1.2;
        double long2 = 1.3;
        double lat3 = 1.2;
        double long3 = 1.3;
        double rel1 = (loc.getLongitude()- long0)*(lat1 - lat0)- ((loc.getLatitude()-lat0)*(long1-long0));
        double rel2 = (loc.getLongitude()- long1)*(lat2 - lat1)- ((loc.getLatitude()-lat1)*(long2-long1));
        double rel3 = (loc.getLongitude()- long2)*(lat3 - lat2)- ((loc.getLatitude()-lat2)*(long3-long2));
        double rel4 = (loc.getLongitude()- long3)*(lat0 - lat3)- ((loc.getLatitude()-lat3)*(long0-long3));

        if (rel1 >= 0 && rel2 >= 0 && rel3 >= 0 && rel4 >= 0 )
        {
            try
            {
            ..........
                            ..........
            }
        else
        {
            .........

        }
        }

最佳答案

  1. 所有 rel1..rel4 必须具有相同的符号,不一定是正数,也许 - 都是负数。
  2. 它仅适用于凸多边形。
  3. 我不知道在 3D 模型上使用 2D 算法是否公平(纬度和经度来自平面坐标,不是吗?)。是的,在一般情况下,它会给出正确的结果,但在某些情况下,您需要处理这种情况,即连接“地球上”的两个点的线不会与投影中的相同。

关于java编码确定点是否位于多边形(矩形)内部的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9018440/

相关文章:

android - 如何恢复 cordova 应用程序而不是重新启动

python - geopandas df 中的形状点几何到纬度/经度列

java - Android 更改 float 操作按钮颜色

java - 如何将整数变量传递给动画?

android - 创建/打开 Cordova 项目时,Visual Studio 2015 挂起

dictionary - 将 graphviz 绘制为 map

java - Java 中的 ECEF 到 lla (lat,lon,alt)

java - NetBeans:强制外部类静态编译到 JAR 中?

java - 如何用 Java 或 C 监视/采样输出音频?

java - 从 Jar 文件中的类文件读取字节