代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
据经纬度查询附近的点
作者:
永泰
/ 发布于
2017/1/18
/
683
大致思想:根据给定经纬度(lat,lng)求出其左上角(left_top),右上角(right_top),左下角(left_bottom),右下角(right_bottom)的四个位置。所有在这个区域的范围都在该点附近。
package com.show.common.util; public class Location { private double latitude; private double longitude; public Location(double latitude, double longitude) { this.latitude = latitude; this.longitude = longitude; } public double getLatitude() { return latitude; } public void setLatitude(double latitude) { this.latitude = latitude; } public double getLongitude() { return longitude; } public void setLongitude(double longitude) { this.longitude = longitude; } } package com.show.common.util; public class LatitudeLontitudeUtil { // http://blog.charlee.li/location-search/ /** 地球半径 */ private static final double EARTH_RADIUS = 6371000; /** 范围距离 */ private double distance; /** 左上角 */ private Location left_top = null; /** 右上角 */ private Location right_top = null; /** 左下角 */ private Location left_bottom = null; /** 右下角 */ private Location right_bottom = null; private LatitudeLontitudeUtil(double distance) { this.distance = distance; } private void getRectangle4Point(double lat, double lng) { // float dlng = 2 * asin(sin(distance / (2 * EARTH_RADIUS)) / cos(lat)); // float dlng = degrees(dlng) // 弧度转换成角度 double dlng = 2 * Math.asin(Math.sin(distance / (2 * EARTH_RADIUS)) / Math.cos(lat)); dlng = Math.toDegrees(dlng); // dlat = distance / EARTH_RADIUS // dlng = degrees(dlat) # 弧度转换成角度 double dlat = distance / EARTH_RADIUS; dlat = Math.toDegrees(dlat); // # 弧度转换成角度 // left-top : (lat + dlat, lng - dlng) // right-top : (lat + dlat, lng + dlng) // left-bottom : (lat - dlat, lng - dlng) // right-bottom: (lat - dlat, lng + dlng) left_top = new Location(lat + dlat, lng - dlng); right_top = new Location(lat + dlat, lng + dlng); left_bottom = new Location(lat - dlat, lng - dlng); right_bottom = new Location(lat - dlat, lng + dlng); } public static double hav(double theta) { double s = Math.sin(theta / 2); return s * s; } public static double getDistance(double lat0, double lng0, double lat1, double lng1) { // from math import sin, asin, cos, radians, fabs, sqrt // def hav(theta): // s = sin(theta / 2) // return s * s // def get_distance_hav(lat0, lng0, lat1, lng1): // "用haversine公式计算球面两点间的距离。" // # 经纬度转换成弧度 // lat0 = radians(lat0) // lat1 = radians(lat1) // lng0 = radians(lng0) // lng1 = radians(lng1) // dlng = fabs(lng0 - lng1) // dlat = fabs(lat0 - lat1) // h = hav(dlat) + cos(lat0) * cos(lat1) * hav(dlng) // distance = 2 * EARTH_RADIUS * asin(sqrt(h)) // return distance lat0 = Math.toRadians(lat0); lat1 = Math.toRadians(lat1); lng0 = Math.toRadians(lng0); lng1 = Math.toRadians(lng1); double dlng = Math.abs(lng0 - lng1); double dlat = Math.abs(lat0 - lat1); double h = hav(dlat) + Math.cos(lat0) * Math.cos(lat1) * hav(dlng); double distance = 2 * EARTH_RADIUS * Math.asin(Math.sqrt(h)); return distance; } public static Location[] getRectangle4Point(double lat, double lng, double distance) { LatitudeLontitudeUtil llu = new LatitudeLontitudeUtil(distance); llu.getRectangle4Point(lat, lng); Location[] locations = new Location[4]; locations[0] = llu.left_top; locations[1] = llu.right_top; locations[2] = llu.left_bottom; locations[3] = llu.right_bottom; return locations; } public static void main(String[] args) { double lat = 30.500; double lng = 120.500; double distance = 500d; Location[] locations = LatitudeLontitudeUtil.getRectangle4Point(lat, lng, distance); String sql = "SELECT * FROM place WHERE lat > " + locations[2].getLatitude() + " AND lat < " + locations[0].getLatitude() + " AND lng > " + locations[0].getLongitude() + " AND lng < " + locations[1].getLongitude(); System.out.println(sql); double lat1 = 30.495503391970406; double lng1 = 120.49261708577215; double d = LatitudeLontitudeUtil.getDistance(lat, lng, lat1, lng1); System.out.println(d); } }
试试其它关键字
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
永泰
贡献的其它代码
(
12
)
.
通过qrcode库生成二维码
.
等待上一行执行完成再执行下一行
.
导出数据到文件
.
据经纬度查询附近的点
.
是用JDBC从数据库中获取数据并以java对象返回
.
JS转C#工具脚本
.
透明样式,兼容全浏览器的css写法如下
.
加密(md5,sha1,base64)
.
NetUtils,跟网络相关的工具类
.
最小生成树 prim
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3