有需求是判断经纬度是否包括在一组经纬度中。

下面是工具类,直接粘贴可以用。

public class SpatialRelationUtil {/*** 返回一个点是否在一个多边形区域内(推荐)** @param mPoints 多边形坐标点列表* @param point   待判断点* @return true 多边形包含这个点,false 多边形未包含这个点。*/public static boolean isPolygonContainsPoint1(List<LatLng> mPoints, LatLng point) {LatLngBounds.Builder boundsBuilder = LatLngBounds.builder();for (LatLng ll : mPoints)boundsBuilder.include(ll);// 如果point不在多边形Bounds范围内,直接返回false。if (boundsBuilder.build().contains(point)) {return isPolygonContainsPoint(mPoints, point);} else {return false;}}/*** 返回一个点是否在一个多边形区域内** @param mPoints 多边形坐标点列表* @param point   待判断点* @return true 多边形包含这个点,false 多边形未包含这个点。*/public static boolean isPolygonContainsPoint(List<LatLng> mPoints, LatLng point) {int nCross = 0;for (int i = 0; i < mPoints.size(); i++) {LatLng p1 = mPoints.get(i);LatLng p2 = mPoints.get((i + 1) % mPoints.size());// 取多边形任意一个边,做点point的水平延长线,求解与当前边的交点个数// p1p2是水平线段,要么没有交点,要么有无限个交点if (p1.longitude == p2.longitude)continue;// point 在p1p2 底部 --> 无交点if (point.longitude < Math.min(p1.longitude, p2.longitude))continue;// point 在p1p2 顶部 --> 无交点if (point.longitude >= Math.max(p1.longitude, p2.longitude))continue;// 求解 point点水平线与当前p1p2边的交点的 X 坐标double x = (point.longitude - p1.longitude) * (p2.latitude - p1.latitude) / (p2.longitude - p1.longitude) + p1.latitude;if (x > point.latitude) // 当x=point.x时,说明point在p1p2线段上nCross++; // 只统计单边交点}// 单边交点为偶数,点在多边形之外 ---return (nCross % 2 == 1);}/*** 返回一个点是否在一个多边形边界上** @param mPoints 多边形坐标点列表* @param point   待判断点* @return true 点在多边形边上,false 点不在多边形边上。*/public static boolean isPointInPolygonBoundary(List<LocationLatLng> mPoints, LatLng point) {for (int i = 0; i < mPoints.size(); i++) {LocationLatLng p1 = mPoints.get(i);LocationLatLng p2 = mPoints.get((i + 1) % mPoints.size());// 取多边形任意一个边,做点point的水平延长线,求解与当前边的交点个数// point 在p1p2 底部 --> 无交点if (point.longitude < Math.min(p1.getLng(), p2.getLng()))continue;// point 在p1p2 顶部 --> 无交点if (point.longitude > Math.max(p1.getLng(), p2.getLng()))continue;// p1p2是水平线段,要么没有交点,要么有无限个交点if (p1.getLng() == p2.getLng()) {double minX = Math.min(p1.getLat(), p2.getLat());double maxX = Math.max(p1.getLat(), p2.getLat());// point在水平线段p1p2上,直接return trueif ((point.longitude == p1.getLng()) && (point.latitude >= minX && point.latitude <= maxX)) {return true;}} else { // 求解交点double x = (point.longitude - p1.getLng()) * (p2.getLat() - p1.getLat()) / (p2.getLng() - p1.getLng()) + p1.getLat();if (x == point.latitude) // 当x=point.x时,说明point在p1p2线段上return true;}}return false;}private static final double EARTH_RADIUS = 6378137.0;/*** 计算两点经纬度距离* @param longitude* @param latitue* @param longitude2* @param latitue2* @return*/public static double getDistance(double longitude, double latitue, double longitude2, double latitue2) {double lat1 = rad(latitue);double lat2 = rad(latitue2);double a = lat1 - lat2;double b = rad(longitude) - rad(longitude2);double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(b / 2), 2)));s = s * EARTH_RADIUS;s = Math.round(s * 10000) / 10000;return s;}private static double rad(double d) {return d * Math.PI / 180.0;}}

判断经纬度是否在一范围内相关推荐

  1. 百度地图——判断用户是否在配送范围内解决方案

    需求: 在pc端设置商家的配送范围,用户在下单时,根据用户设置的配送地点判断是否在可配送范围内,并给用户相应的提示. 实现: 1.用百度地图在PC端设置配送范围,可拖拽选择 2.根据用户设置的配送地址 ...

  2. java实现经纬度坐标是否在范围内的算法

    需求是:一个点(经纬度)是否在一个多边形内部,多边形有多个点构成,每个点是一个实际的经纬度坐标,有多个点构成一个多边形, 算法数学上实现思路: 判断一个点是在一个多边形内部的集中情况 第一:目标点在多 ...

  3. HDU1756(判断一个点是否在多边形内)

    以下内容是在自己学习中总结出来了的,如果有什么错误,请指出,谢谢! 判断一个点是否在多边形内: (1)判断方法一(具有一定的局限性):将测试点的Y坐标与多边形的每一个点进行比较,将得到一 个与多边形的 ...

  4. JS判断是否选中的是表格内当前选中的那一行

    项目需要,需要传递表格任意行的值给后台或者是其他页面, 因此需要获取到鼠标所在行或者点击行的相关参数与值 JS判断是否选中的是表格内当前选中的那一行 https://zhidao.baidu.com/ ...

  5. jQuery: 判断指针是否在某元素内 How do I check if the mouse is over an element

    代码: // required jquery.min.js$(function() { var $current_tab_menu = $('#main_menu');$(document).on(' ...

  6. python判断当前时间是否在两个时间之间_Python 判断时间是否在时间区间内的实例...

    判断时间是否在时间区间内 大家都知道 3<4<5这种连等式判断在python中是可行的 >>> 3<4<5 True 那么给定时间是否在时间区间内,也可以用连 ...

  7. JS判断日期是否在同一个星期内,和同一个月内

    今天要用到判断日期是否在同一个星期内和是否在同一个月内,在网上找了好一会儿也没找到合适的,然后自己写了一个方法来处理这个问题,思路就不详细介绍了,直接附上代码,自己测试了一下 没有问题,若有问题请在评 ...

  8. 正六边形:判断点是否在正六边形内

    前文 正六边形:平铺中函数 //根据坐标计算网格信息 Vec2 HelloWorld::getGridByPos(const Vec2& pos) {int girdX = pos.x/ (1 ...

  9. 【寒江雪】判断一个点是否在网格内

    判断一个点是否在多边形网格内   根据前几天看到的博客--<判断一个点是否在多边形内>--突发奇想,设计一个算法判断一个点是否在多面体网格内.   这里假设该网格物体都是由许多个三角面构成 ...

  10. 判断某点是否在三角形内

    判断某点是否在三角形内 这个问题碰到过好几次了,不仅是笔试的时候,还有在工作上,所以这里做个小总结. 1.通过第三方库函数 首先介绍最简单的方法,直接调用已有的函数.采用python的matplotl ...

最新文章

  1. props写法_简单理解vue中Props属性
  2. 201671010128 2017-11-05《Java程序设计》之集合
  3. 一个插排引发的设计思想 (一) 观察者模式
  4. 非正常关闭vi编辑器时会生成一个.swp文件
  5. Java制作VCARD
  6. 《ASP.NET 本质论》源码下载
  7. python自动化办公excel-Python自动化办公之操作Excel文件
  8. 巧用编辑器正则表达式,批量修改删除超链接
  9. linux挂载硬盘_玩客云刷机系统之挂载U盘/硬盘增加储存空间
  10. Hexo框架下用NexT(v7.0+)主题美化博客
  11. VSCode 中常用的 PHP 编程插件
  12. java单例模式(下)
  13. 2019网易互娱8.9笔试
  14. Hadoop性能调优总结
  15. 2023最新WSL搭建深度学习平台教程(适用于Docker-gpu、tensorflow-gpu、pytorch-gpu)
  16. MATLAB imresize函数的用法
  17. ORACLE 11.2.0.4 坏块处理 ORA-00600ORA-00607
  18. Android设置TextView点击时变换颜色(内有无效果解决方案)
  19. 高通王翔:每年收入20%投入研发
  20. 云笔记使用的感受想法!(对有道云笔记、印象云笔记的比较与评价)

热门文章

  1. Oracle | 初级-第一章 Oracle概述
  2. 给大家推荐一本书:你只是看起来很努力
  3. JavaScript的通用库与动画特效
  4. 剑指 Offer II 028. 展平多级双向链表
  5. There was an error checking the latest version of pip
  6. 变限积分性质的总结笔记
  7. 年度总结 | 目标检测2019,你还有不知道的吗?
  8. 免费和开源引擎的游戏引擎,转载自维基
  9. Python处理Excel,学会这十四个方法,工作量减少大半!
  10. FC-SAN存储技术