latitude

LBS中从数据库查询某经纬度2KM范围内的数据 - 针对大数据量的性能优化

六月ゝ 毕业季﹏ 提交于 2020-03-16 04:22:21
之前很啥很天真地以为无非就是逐个计算距离,然后比较出来就行了,然后当碰到访问用户很多,而且数据库中经纬度信息很多的时候,计算量的迅速增长,能让服务器完全傻逼掉,还是老前辈的经验比我们丰富,给了我很大的启示。 MySQL 性能 调优 – 使用更为快速的 算法 进行距离计算 最近遇到了一个问题,通过不断的尝试最终将某句原本占据近1秒的查询 优化 到了0.01秒,效率提高了100倍. 问题是这样的,有一张存放 用户 居住地点经纬度信息的MySQL数据表,表结构可以简化 为:id(int),longitude(long),latitude()long. 而业务 系统 中有一个功能是查找离某个用户最近的其余数个用户,通过代码分析,可以确定原先的做法基本是这样的: //需要查询的用户的坐标 $lat=20; $lon=20;//执行查询,算出该用户与所有其他用户的距离,取出最近的10个 $sql='select * from users_location order by ACOS(SIN(('.$lat.' * 3.1415) / 180 ) *SIN((latitude * 3.1415) / 180 ) +COS(('.$lat.' * 3.1415) / 180 ) * COS((latitude * 3.1415) / 180 ) *COS(('.$lon.' * 3.1415) /

sql语句查询经纬度范围

混江龙づ霸主 提交于 2020-03-16 04:19:05
指定一个经纬度,给定一个范围值(单位:千米),查出在经纬度周围这个范围内的数据。 经度:113.914619 纬度:22.50128 范围:2km longitude为数据表经度字段 latitude为数据表纬度字段 SQL在mysql下测试通过,其他数据库可能需要修改 SQL语句如下: select * from location where sqrt( ( ((113.914619-longitude)*PI()*12656*cos(((22.50128+latitude)/2)*PI()/180)/180) * ((113.914619-longitude)*PI()*12656*cos (((22.50128+latitude)/2)*PI()/180)/180) ) + ( ((22.50128-latitude)*PI()*12656/180) * ((22.50128-latitude)*PI()*12656/180) ) )<2 MySQL性能调优 – 使用更为快速的算法进行距离 最近遇到了一个问题,通过不断的尝试最终将某句原本占据近1秒的查询优化到了0.01秒,效率提高了100倍. 问题是这样的,有一张存放用户居住地点经纬度信息的MySQL数据表,表结构可以简化 为:id(int),longitude(long),latitude()long.

mpvue小程序开发之 城市定位

不问归期 提交于 2020-03-07 07:34:08
背景: 在进行小程序开发时,有一个定位城市的需求,下面就来讲讲怎么实现这个功能的吧 解决方案: 小程序的wx.getLocation()获得是经纬度并不包含地名,所以要通过经纬度用相应的地图转换出地名(本文使用的是百度地图)。 /* 微信获取城市定位 */ wx.getLocation({ type: 'wgs84', success(res) { const latitude = res.latitude const longitude = res.longitude const speed = res.speed const accuracy = res.accuracy console.log('-d---------------------') console.log(res) scope.getCityInfo(latitude,longitude) } }) 1.1代码详解  wx.getLocation(object):获取当前的地理位置、速度。注意:需要用户授权地理定位权限。     详细参数说明请查看小程序API:https://developers.weixin.qq.com/miniprogram/dev/api/location.html#wxgetlocationobject 我们看看wx.getLocation()成功后获得到的数据:

关于经纬度坐标与utm坐标之间的相互转换api

孤者浪人 提交于 2020-03-03 16:49:40
/* * Author: Sami Salkosuo, sami.salkosuo@fi.ibm.com * * (c) Copyright IBM Corp. 2007 */ package com.baidu.traffic.sc.common.util; // add by liushouyun 20190515 for convert UTM & lat/lon // IBM https://www.ibm.com/developerworks/cn/java/j-coordconvert/index.html#artdownload import java.util.Hashtable; import java.util.Map; public class CoordinateConversion { public CoordinateConversion() { } public double[] utm2LatLon(String UTM) { UTM2LatLon c = new UTM2LatLon(); return c.convertUTMToLatLong(UTM); } public String latLon2UTM(double latitude, double longitude) { LatLon2UTM c = new LatLon2UTM();

iOS开发中的火星坐标系及各种坐标系转换算法

青春壹個敷衍的年華 提交于 2020-02-28 21:11:25
其原理是这样的:保密局开发了一个系统,能将实际的坐标转换成虚拟的坐标。所有在中国销售的数字地图必须使用这个系统进行坐标转换之后方可上市。这是生产环节,这种电子地图被称为火星地图。在使用环节,GPS终端设备必须集成保密局提供的加密算法(集成工作由保密局完成),把从GPS卫星那里得到的坐标转换成虚拟坐标,然后再去火星地图上查找,这样就在火星坐标系上完成了地图的匹配。 所以大家所用的百度,高德等地图定位准是偏差几百米 名词总结: 地球坐标:指WGS84坐标系统 火星坐标:指使用国家保密插件人为偏移后的坐标 地球地图:指与地球坐标对应的客观真实的地图 火星地图:指经过加密偏移后的,与火星坐标对应的地图 坐标系转换算法 1. GCJ-02(火星坐标系)和BD-09转换 // GCJ-02 坐标转换成 BD-09 坐标 + (CLLocationCoordinate2D)MarsGS2BaiduGS:(CLLocationCoordinate2D)coordinate { double x_pi = PI * 3000.0 / 180.0; double x = coordinate.longitude, y = coordinate.latitude; double z = sqrt(x * x + y * y) + 0.00002 * sin(y * x_pi); double theta

小程序 cover-view 使用

随声附和 提交于 2020-02-26 02:25:00
覆盖在原生组件之上的文本视图。 可覆盖的原生组件包括 map、video、canvas、camera、live-player、live-pusher 只支持嵌套 cover-view、cover-image,可在 cover-view 中使用 button。组件属性的长度单位默认为px,2.4.0起支持传入单位(rpx/px)。 个人示例 <map class="map" id="map" longitude="{{longitude}}" latitude="{{latitude}}" scale="16" markers="{{markers}}" bindmarkertap="makertap" bindregionchange="mapchangeTap" > <cover-view class="tips-dialog"> <cover-image src="/assets/img/dialog@2x.png" class="tips-dialog-img"></cover-image> <cover-view wx:if="{{xb_count}}" class="tips-dialog-txt"> <cover-view class="xb">附近有{{xb_count}}位小帮</cover-view> <cover-view class="minute">

高德地图把多个点正好放置在屏幕中(记录下)

不羁的心 提交于 2020-02-19 06:43:51
通过: aMap.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, 150)); 来实现 newLatLngBounds(bounds, 150) :一参数:LatLngBounds创建一个矩形范围,二参数:padding值 代码: ★★★遍历出集合中的最大最小经纬度★★★ double maxLat = latLngList . get ( 0 ) . latitude ; double minLat = latLngList . get ( 0 ) . latitude ; double maxLon = latLngList . get ( 0 ) . longitude ; double minLon = latLngList . get ( 0 ) . longitude ; for ( int i = 0 ; i < latLngList . size ( ) ; i ++ ) { if ( maxLat < latLngList . get ( i ) . latitude ) { maxLat = latLngList . get ( i ) . latitude ; } if ( minLat > latLngList . get ( i ) . latitude ) { minLat =

housing_project

百般思念 提交于 2020-02-12 15:31:02
housing . describe ( ) longitude latitude housing_median_age total_rooms total_bedrooms population households median_income median_house_value count 20640.000000 20640.000000 20640.000000 20640.000000 20433.000000 20640.000000 20640.000000 20640.000000 20640.000000 mean -119.569704 35.631861 28.639486 2635.763081 537.870553 1425.476744 499.539680 3.870671 206855.816909 std 2.003532 2.135952 12.585558 2181.615252 421.385070 1132.462122 382.329753 1.899822 115395.615874 min -124.350000 32.540000 1.000000 2.000000 1.000000 3.000000 1.000000 0.499900 14999.000000 25% -121.800000 33.930000 18

pandas 数据分析展示

柔情痞子 提交于 2020-02-06 11:21:51
%matplotlib inline import pandas as pd import matplotlib.pyplot as plt import math import pytz tz = pytz.timezone('America/New_York') def geodistance(lng1, lat1, lng2, lat2): lng1, lat1, lng2, lat2 = map(math.radians, [float(lng1), float(lat1), float(lng2), float(lat2)]) dlon = lng2 - lng1 dlat = lat2 - lat1 a = math.sin(dlat / 2) ** 2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon / 2) ** 2 distance = 2 * math.asin(math.sqrt(a)) * 6371 * 1000 distance = round(distance / 1000, 3) return distance def total_distance(d): lngs = d['longitude'].values.tolist() lats = d['latitude'].values.tolist(

PHP版根据经纬度和半径计算出经纬度的范围

穿精又带淫゛_ 提交于 2020-02-04 04:08:56
百度地图提供了范围搜索的功能,但是它使用的是百度自己的数据,但是有时候我们需要使用自己的数据,显示在地图上。比如给定两个参数:指定位置(某一处的经纬度lnglat)和搜索半径(r),搜索指定范围内的数据。针对这样的需求,基本有三种方法可以解决: 1:根据map提供的计算两个坐标之间距离的方法,逐一计算指定位置和我们DB库中的位置的距离s,用s和r进行比较,如果s<r,则在搜索范围内,返给前段标注在地图上。这种方法如果数据量小,可以尝试,如果数据量大,没测试过,但可以想象…… 2:使用搜索引擎自带的功能,比如solr的位置感知搜索,可参看文章http://www.ibm.com/developerworks/cn/java/j-spatial/ 3:如果对精度要求不是很高,可以根据指定位置的经纬度和半径计算出经纬度的范围,然后判断DB中的经纬度是否在此范围内,可用SQL进行查询。下面是此计算方法: /** * @param lat 纬度 lon 经度 raidus 单位米 * return minLat,minLng,maxLat,maxLng */ public function getAround($lat,$lon,$raidus){ $PI = 3.14159265; $latitude = $lat; $longitude = $lon; $degree = (24901