根据一个经纬度坐标获取周边最近经纬。Java实现
1.需求:指定一个经纬度坐标,如:(31.2121751783,121.4411213954)。周围有一堆经纬度坐标,找出与它最近的那个。
2.实现思路:将给出经纬度看成原点(0,0)。周围经纬度定位后利用三角形第三边计算原点到各个经纬度的半径距离,最短的那个即最近的经纬。
3.具体代码:
package com.zjj.LatAndLongDemo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List; import com.zjj.Entity.LocalAddress; public class Test3 { private static List<LocalAddress> ilist = new ArrayList<LocalAddress>();
public static void main(String[] args) {
Test3 test3 = new Test3();
Double localDouble = 0.0; //定义一个二维数组存放经纬度
Double[][] doubles = { { 31.1963877723, 121.4940175770 },
{ 31.2020280000, 121.5006010000 },
{ 31.1963702573, 121.4940084124 },
{ 31.1951946273, 121.4991236524 },
{ 31.1983746273, 121.4895436524 },
{ 31.2068062375, 121.4686363819 },
{ 31.2127140000, 121.4751610000 },
{ 31.2067706666, 121.4686028298 },
{ 31.2056732366, 121.4737227198 },
{ 31.2087332366, 121.4640927198 },
{ 31.2103126101, 121.4457401593 },
{ 31.2166680000, 121.4521640000 } };
//门店的经纬度
Double[] initlocal = {31.1221751783,121.5011213954 }; for (int i = 0; i < doubles.length; i++) {
System.out.println("(" + doubles[i][0] + "," + doubles[i][1] + ")");
Double z = test3.GetShotLocal(doubles[i][0], doubles[i][1],initlocal[0], initlocal[1]);
System.out.println(z);
//获取最短距离后把经纬度和距离存放到对象中
LocalAddress localaddress = new LocalAddress(doubles[i][0], doubles[i][1], z);
//将对象用list保存
ilist.add(localaddress);
} List<LocalAddress> shotlocal = getLocalList();
Double lat=shotlocal.get(0).getLat();
Double lon= shotlocal.get(0).getLon();
localDouble = shotlocal.get(0).getDistance();
System.err.println("最近的距离:" + localDouble + "。对应的经纬是:" +"(" + lat + "," + lon + ")");
} /**
* 获取最短的距离
* @param lat
* @param lon
* @param initlat
* @param initlon
* @return
*/
public Double GetShotLocal(Double lat, Double lon, Double initlat,Double initlon) {
Double x = (initlat - lat) * (initlat - lat);
Double y = (initlon - lon) * (initlon - lon);
Double z = Math.sqrt(x + y);
return z;
} /**
* 对List<LocalAddress> 进行排序
* @return
*/
public static List<LocalAddress> getLocalList() {
Collections.sort(ilist, new Comparator<LocalAddress>() {
@Override
public int compare(LocalAddress arg0, LocalAddress arg1) {
Double double1 = arg0.getDistance();
Double double2 = arg1.getDistance();
if(double1>double2){
return 1;
}else if (double1 == double2) {
return 0;
}else {
return -1;
}
}
});
return ilist;
}
} LocalAddress类: package com.zjj.Entity; public class LocalAddress { private Double lat;
private Double lon;
private Double distance; public LocalAddress() {
// TODO Auto-generated constructor stub
} public LocalAddress(Double lat, Double lon, Double distance) {
super();
this.lat = lat;
this.lon = lon;
this.distance = distance;
}
public Double getLat() {
return lat;
}
public void setLat(Double lat) {
this.lat = lat;
}
public Double getLon() {
return lon;
}
public void setLon(Double lon) {
this.lon = lon;
}
public Double getDistance() {
return distance;
}
public void setDistance(Double distance) {
this.distance = distance;
} }
4.效果:
为了方便查看效果这里给出两组简单数据,代码中是真实经纬度。
根据一个经纬度坐标获取周边最近经纬。Java实现的更多相关文章
- java实现判断一个经纬度坐标是否在一个多边形内(经自己亲测)
1.在高德地图上绘制的多边形:经纬度逗号分隔格式:上面是用来方便存坐标的对象:下面是方法测试:直接复制代码即可运行 public class Point { private Double x; pri ...
- 通过经纬度坐标计算距离的方法(经纬度距离计算)ZZ
通过经纬度坐标计算距离的方法(经纬度距离计算) 最近在网上搜索“通过经纬度坐标计算距离的方法”,发现网上大部分都是如下的代码: #define PI 3.14159265 static double ...
- C#的百度地图开发(三)依据坐标获取位置、商圈及周边信息
原文:C#的百度地图开发(三)依据坐标获取位置.商圈及周边信息 我们得到了百度坐标,现在依据这一坐标来获取相应的信息.下面是相应的代码 public class BaiduMap { /// < ...
- 利用百度地图API,获取经纬度坐标
利用百度地图API,获取经纬度坐标 代码很简单,但在网上没找到现成的获取地图经纬度的页面. 就是想,给当前页面传递一个经纬度,自动定位到此经纬度.然后可以重新选择,选择完返回经纬度. 效果如下: 源代 ...
- C# JackLib系列之如何获取地球上两经纬度坐标点间的距离
获取地球上两经纬度坐标点间的距离,利用[大圆距离公式] A diagram illustrating great-circle distance (drawn in red) between tw ...
- ionic 3 安卓手机获取经纬度坐标
现在有个需求:每隔一段时间需向后台服务器返回当前用户的经纬度坐标. ionic 官方提供的有定位插件cordova-plugin-geolocation,兼容ios和android版本,网上查资料说最 ...
- 批量调用百度地图API获取地址经纬度坐标
1 申请密匙 注册百度地图API:http://lbsyun.baidu.com/index.php?title=webapi 点击左侧 “获取密匙” ,经过填写个人信息.邮箱注册等,成功之后在开放平 ...
- MacOS下Terminal获取GPS经纬度坐标
通过命令行直接获取经纬度坐标MacOS 首先下载WhereAmI,最新版本: https://github.com/robmathers/WhereAmI/releases/download/v1.1 ...
- 根据经纬度坐标计算距离-python
一.两个坐标之间距离计算 参考链接: python实现 1.Python 根据地址获取经纬度及求距离 2.python利用地图两个点的经纬度计算两点间距离 LBS 球面距离公式 美团app筛选“离我最 ...
随机推荐
- Python基础教程(015)--Python2默认不支持中文
前言 Python2默认不支持中文 内容 市场上有Python2,和Python3, Python2的解释器不支持中文. 用Python3来运行文件. 错误信息 SyntaxError:Non-ASC ...
- Delphi 如何在程序中执行动态生成的Delphi代码
如何在程序中执行动态生成的Delphi代码 经常发现有人提这类问题,或者提问内容最后归结成这种问题 前些阵子有位高手写了一个“执行动态生成的代码”,这是真正的高手,我没那种功力,我只会投机取巧. 这里 ...
- 转载:AWR介绍使用
转载自 http://www.cnblogs.com/lanzi/archive/2011/03/07/1975096.html 自动工作负载库(Automatic Workload Reposito ...
- mongodb配置详解
#启用日志文件,默认启用 journal=true #这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false quiet=false # 日志文件位置 logpath=/usr/loc ...
- OSX 创建 randisk(或称 tmpfs)
创建步骤: #!/bin/bash ramdisk_size_in_mb= mount_point=/private/tmp ramdisk_size_in_sectors=$((${ramdisk_ ...
- django简单实现注册登录模块
源码下载:https://files.cnblogs.com/files/hardykay/login.zip 新建项目(我使用pycharm开发,也可以使用如下命令建立项目 ) cmd命令行,前提需 ...
- POJ 3468 A Simple Problem with Integers(线段树,区间更新,区间求和)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 67511 ...
- Php 十六进制短浮点数转十进制,带符号位
/** * 十六进制浮点型转为十进制 * @param String $strHex 十六进制浮点数 * @return 十进制 */ public static function hexToDecF ...
- 55.Top K Frequent Elements(出现次数最多的k个元素)
Level: Medium 题目描述: Given a non-empty array of integers, return the k most frequent elements. Exam ...
- 重读ORB_SLAM之LoopClosing线程难点
1. DetectLoop 这里有个ConsistenGroup概念,比较难懂.这里是最让人迷惑的地方.一旦vbConsistentGroup为真,其他帧的spCanditateGroup就进不来了. ...