`
Danny_zhao
  • 浏览: 9665 次
  • 性别: Icon_minigender_2
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

google map 、经纬度

阅读更多

             google map或百度map 应用

 

关于map的具体用法请参考各自官方API。

google和百度map都提供了范围搜索的功能:比如搜索指定位置指定范围内的所有kfc店铺,它们使用的都是自己的店铺数据,可有时候我们只需要在地图上显示我们自己存储的店铺,并把它们标注在地图上,同样只给定两个参数:指定位置(某一处的经纬度lnglat)和搜索半径(r)。

每个地图API都提供了计算两个坐标之间距离的方法,我们可以从库中拿出所有的店铺的经纬度(slnglat),然后逐一计算出lnglat到slnglat距离s,若s<r,则这个店铺就是我们想要的可以直接返回给前端标注在地图上。呃...这种方法当然不可行,不过当然也不是绝对的啦...^_^

前段时间写了个例子,主要通过java实现(计算距离经纬度范围之类的)

1. 建立模型:半径r的范围表示一个圆,不过一般情况下我们完全可以把它看作是一正方形...呀呀呀,还是用代码说话吧,下面是一个pojo:

 

/**
* 类Bounds.java的实现描述:用户当前位置半径x米的经纬度范围
*
* @author zjb 2011-3-30 下午04:56:13
*/
public class Bounds {

/**
* 当前位置正北方向x米处 纬度
*/
private Double latN;
/**
* 当前位置正南方向x米处 纬度
*/
private Double latS;
/**
* 当前位置正东方向x米处 经度
*/
private Double lagE;
/**
* 当前位置正西方向x米处 经度
*/
private Double lagW;


//getters or setters

}

 

 

2. 计算所需要的经纬度范围Bounds,表示该点(lnglat)处正东西南北距离r处的经纬度坐标,具体方法如下:

//注意BigDecimal类

private static final int DEFAULT_DIV_SCALE = 6;

/**
* 1000表示1公里,111表示同经度时,纬度相差一度,距离就相差111公里
*
* @param lat 当前位置纬度
* @param lag 当前位置经度
* @param r 半径,单位M(附近rM)
* @return Bounds
*/
public static Bounds conversion(Double lat, Double lag, Integer r) {
String l = String.valueOf(1000 * 111);
String latx = new BigDecimal(String.valueOf(r)).divide(new BigDecimal(l), DEFAULT_DIV_SCALE,
BigDecimal.ROUND_HALF_EVEN).toString();
String lagx = new BigDecimal(latx).divide(new BigDecimal(String.valueOf(Math.cos(lat))), DEFAULT_DIV_SCALE,
BigDecimal.ROUND_HALF_EVEN).toString();
Double latN = lat + Math.abs(Double.valueOf(latx));
Double latS = lat - Math.abs(Double.valueOf(latx));
Double lagE = lag + Math.abs(Double.valueOf(lagx));
Double lagW = lag - Math.abs(Double.valueOf(lagx));
Bounds bounds = new Bounds();
bounds.setLagE(lagE);
bounds.setLagW(lagW);
bounds.setLatN(latN);
bounds.setLatS(latS);
return bounds;
}

 

 

 

3. 拿到Bounds,就能获取指定位置(lnglat)正东西南北距离r处的经纬度,然后再去查询数据库,sql如下(mybatis):

//company 里面存放经纬度
SELECT * FROM company where lat >= #{latS} and lat <= #{latN} and lag >= #{lagW} and lag <= #{lagE}

4. 以上获取到的是以lnglat为中心,2r为长宽的正方形区域内的所有已存储店铺,我这里进行了过滤(遍历上面的数据,计算它到lnglat的距离,大于r则剔除)保证取到的是在圆形区域:

 

 

/**
* @param lat 纬度
* @param lag 经度
* @param r 半径
* @return Boolean
*/
public static Boolean check(Company company, Double lat, Double lag, Integer r) {
double R = 6371;//地球半径
double distance = 0.0;
double dLat = Double.valueOf(new BigDecimal(String.valueOf((company.getLat() - lat)))
.multiply(new BigDecimal(String.valueOf(Math.PI)))
.divide(new BigDecimal(String.valueOf(180)),
DEFAULT_DIV_SCALE,BigDecimal.ROUND_HALF_EVEN).toString());
double dLon = Double.valueOf(new BigDecimal(String.valueOf((company.getLag() - lag)))
.multiply(new BigDecimal(String.valueOf(Math.PI)))
.divide(new BigDecimal(String.valueOf(180)),
DEFAULT_DIV_SCALE,BigDecimal.ROUND_HALF_EVEN).toString());
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(company.getLat() * Math.PI / 180)
* Math.cos(lat * Math.PI / 180) * Math.sin(dLon / 2) * Math.sin(dLon / 2);
distance = (2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))) * R * 1000;
System.out.println(distance);
if (distance > Double.valueOf(String.valueOf(r))){
return false;
}
return true;
}

 

 

好了,拿到圆形区域内的所有店铺了,根据其经纬度标注到地图上吧。

 

 

 

分享到:
评论

相关推荐

    googlemap 经纬度 地理位置查询

    一个google map小应用 应用google map api可以获得点的经纬度并且可以根据地理位置名称定位。

    google map v3 经纬度转换成详细地址

    根据经纬度转换成详细地址。由于google map v2 已申请不了key 了, 更换成v3, 代码也需要更换成v3代码。2013-10-30上传。

    googleMap根据经纬度获取地理位置

    首先,`googleMap根据经纬度获取地理位置`这个标题涉及到的核心技术是Google Maps Geocoding服务。Geocoding是将地址或坐标(经纬度)转换为地理坐标的过程,反之亦然。在Google Maps API中,我们可以使用Geocoding ...

    android手机google地图开发时与实际地图上经纬度的转换问题.docx

    这篇文章总结了Google Map API中的经纬度标示方法,并提供了实际示例,展示如何将实际地图上的经纬度转换为Android Google Map可使用的经纬度。 一、Google Map API中的经纬度标示方法 Google Map API使用的经纬度...

    googlemap根据经纬度取地名

    googlemap根据经纬度取地名。是一个用googlemap根据经纬度 来得到地名的小页面程序。

    Android中获取当前位置的经纬度,并在Google Map Android v2显示

    实现通过GPS或NetWork获取当前位置的经纬度,并且在Google Map Android v2上显示

    c#模拟手机通过GoogleMap当前点的经纬度

    本项目“c#模拟手机通过GoogleMap当前点的经纬度”正是聚焦于这一主题,通过C#编程语言来模拟手机,获取基站的Cell ID,并结合Google Maps API解析这些数据,以确定设备的精确经纬度。 首先,我们需要了解Cell ID的...

    Googlemap 根据地名查询经纬度

    Googlemap 根据地名查询经纬度,Googlemap 根据地名查询经纬度

    Java 调用Google Map Api解析地址,解析经纬度实例

    使用google地图的反向地址解析功能,提供一个经纬度得到对应地址,或者给出模糊地址,得到经纬度,放在java后台代码中处理,这个使用的是Google的地理编码服务。一般而言数据量不大的情况使用是不限制的。按照Google...

    Google地图经纬度偏差纠正

    这里,我们将深入探讨“Google地图经纬度偏差纠正”这一主题。 首先,GPS接收器获取的原始坐标是基于WGS84(World Geodetic System 1984)坐标系统,这是一个国际通用的大地坐标系,用于全球定位。然而,Google地球...

    Google Map 有地面获取相应的经纬度

    在本话题中,我们将聚焦于如何通过Google Map获取地面特定地名对应的经纬度坐标。 经纬度是地球上定位的坐标系统,经度(longitude)对应于南北方向,以本初子午线为0°,向东至180°,向西至180°;纬度(latitude...

    Google Map

    当我们谈论“获取Google Map经纬度”时,我们实际上是指通过交互操作或编程接口(API)从Google Map中提取出特定位置的地理坐标。 获取经纬度是地理信息系统中的基本操作,它涉及到地理坐标系统,其中最常用的是WGS...

    googlemap纠偏数据库

    googlemap的全国纠偏对应数据,里面可以直接用84转换到googlemap经纬度

    根据GoogleMapApi给出地名获取经纬度,给出经纬度获取地名(Java版本)

    根据GoogleMapApi给出地名获取经纬度,给出经纬度获取地名(Java版本) RT

    android安卓绝对可以获取GPS经纬度的google map demo

    android安卓绝对可以获取GPS经纬度的google map demo。使用谷歌api,不需要网络,可以直接获取经纬度,获取经纬度写到一个类中,直接调用start,关闭使用stop。 注意要在室外使用! 打开应用,马上开始获取地址,多次...

    基于Googlemap的地址转换经纬度

    Google Maps API提供了一个强大的服务,可以将地址解析为经纬度坐标,这在Web开发和数据分析中非常实用。本教程将详细介绍如何使用Google Maps API来实现这一功能,以处理CSV文件中的地址。 首先,我们需要理解CSV...

    Android使用Google Map API创建的根据经纬度定位的程序

    Android使用Google Map API创建的一个根据经纬度定位的程序. 交流QQ群:1279871

    Android使用Google Map API创建的一个根据经纬度定位的程序二

    5. **初始化地图**: 在Activity或Fragment的生命周期方法中初始化地图,如`onCreate`或`onActivityCreated`,并调用`getMapAsync`来获取`GoogleMap`对象。 6. **定位权限**: 确保在AndroidManifest.xml中请求了定位...

    谷歌地图GoogleMap

    Google Map API(Application Programming Interface)则是谷歌为开发者提供的接口,允许他们将谷歌地图的功能集成到自己的网站或应用中,提供丰富的地图定制和交互能力。 一、Google Map API基础 Google Map API...

    C#.NET实现GoogleMap 地址及经纬度查询

    总结来说,C#.NET实现Google Map的地址及经纬度查询涉及到网络请求、JSON解析以及Google Maps API的使用。这个过程需要理解RESTful API的工作原理,掌握HTTP客户端操作,以及JSON数据结构的解析。同时,要遵循Google...

Global site tag (gtag.js) - Google Analytics