我目前在mysql数据库中的位置不到一百万个,都有经度和纬度信息.
我试图通过查询找到一个点和许多其他点之间的距离.它没有我想要的那么快,尤其是每秒100次点击.
是否有更快的查询或可能比mysql更快的系统?我正在使用此查询:
SELECT
name,
( 3959 * acos( cos( radians(42.290763) ) * cos( radians( locations.lat ) )
* cos( radians(locations.lng) - radians(-71.35368)) + sin(radians(42.290763))
* sin( radians(locations.lat)))) AS distance
FROM locations
WHERE active = 1
HAVING distance < 10
ORDER BY distance;
Run Code Online (Sandbox Code Playgroud)
注意:提供的距离以英里为单位.如果您需要公里数,请使用6371
而不是3959
.
在处理GIS源代码时,您经常需要编写纬度和经度坐标元组.
例如,在谷歌地图链接(123,456):
哪个是首选顺序(为什么?)
纬度,经度
经度和纬度
我已经看到它们被用于各种系统,我希望找到一些证据来坚持使用其他系统.
GeoJSON和TopoJSON之间的区别是什么?我何时使用另一个?
GitHub上TopoJSON的描述意味着TopoJSON文件缩小了80%.那么为什么不一直只使用TopoJSON呢?
编辑:我已经使用Postgres和PostGIS几个月了,我很满意.
我需要分析几百万个地理编码记录,每个记录都有纬度和经度.这些记录包括至少三种不同类型的数据,我将试图看看每一组是否影响另一组.
什么数据库最适合所有这些数据的底层数据存储?这是我的愿望:
我已经使用MySql进行了一些开发,但如果有必要我可以更改.
我正在使用shapefile(.shp,.dbf等),并希望将其转换为xml.我在Mac上,我很难找到一个可以帮助我进行转换的应用程序.有谁知道将这种文件格式转换为xml文件的方法?
在Google地图中叠加shapefile的最佳方法是什么?
经过一些阅读建议,将shapefile转换为KML并在Google地图中叠加KML是一种选择.如果是这种情况,我如何将shapefile转换为KML?
我相信会有一些开源工具可用于此转换.任何人都可以指向一个工具来将shapefile转换为KML而不会丢失任何数据吗?
给定lat/long中的现有点,(以KM表示)和方位(以度数转换为弧度)的距离,我想计算新的纬度/经度.这个网站反复出现,但我无法让这个公式为我工作.
采用上述链接的公式为:
lat2 = asin(sin(lat1)*cos(d/R) + cos(lat1)*sin(d/R)*cos(?))
lon2 = lon1 + atan2(sin(?)*sin(d/R)*cos(lat1), cos(d/R)?sin(lat1)*sin(lat2))
Run Code Online (Sandbox Code Playgroud)
上述公式适用于MSExcel,其中 -
asin = arc sin()
d = distance (in any unit)
R = Radius of the earth (in the same unit as above)
and hence d/r = is the angular distance (in radians)
atan2(a,b) = arc tan(b/a)
? is the bearing (in radians, clockwise from north);
Run Code Online (Sandbox Code Playgroud)
这是我在Python中获得的代码.
import math
R = 6378.1 #Radius of the Earth
brng = 1.57 #Bearing is 90 degrees converted …
Run Code Online (Sandbox Code Playgroud) 从GIS文件(城市地图)获得一组(2D)点,我需要生成定义该地图(其边界)的"轮廓"的多边形.它的输入参数是点集和"最大边长".然后它将输出相应的(可能是非凸的)多边形.
到目前为止,我发现的最佳解决方案是生成Delaunay三角形,然后移除长度超过最大边长的外边缘.在所有外边缘都短于此之后,我只需移除内部边缘并获得我想要的多边形.问题是,这非常耗时,我想知道是否有更好的方法.
我创建了一个hello world程序来加载一个本地kml文件(借用谷歌的文档):
var ctaLayer = new google.maps.KmlLayer("http://localhost:8080/kml/cta.kml");
Run Code Online (Sandbox Code Playgroud)
这不起作用(没有任何东西被加载).
但是,当我将该行更改为:
var ctaLayer = new google.maps.KmlLayer("http://gmaps-samples.googlecode.com/svn/trunk/ggeoxml/cta.kml");
Run Code Online (Sandbox Code Playgroud)
它正确加载.两个kml文件都是相同的.在自己提供服务时,我需要做些什么来加载它?(我尝试了绝对和相对路径,我知道我使用的路径是正确的......)
我还在我的appserver的配置文件中添加了正确的mime类型:
<mime-mapping>
<extension>kml</extension>
<mime-type>application/vnd.google-earth.kml+xml</mime-type>
</mime-mapping>
<mime-mapping>
<extension>kmz</extension>
<mime-type>application/vnd.google-earth.kmz</mime-type>
</mime-mapping>
Run Code Online (Sandbox Code Playgroud)
但它仍然没有加载.
我在谷歌的文档中发现了这个:
Google Maps API支持用于显示地理信息的KML和GeoRSS数据格式.这些数据格式使用KmlLayer对象显示在地图上,该对象的构造函数采用可公开访问的KML或GeoRSS文件的URL.
所以,我想什么,我试图做的是没有可能的,而不从公开访问的网址服务的KML ......除非有人能够证明否则
有没有可能在不使用webservices的情况下确定point(lat/lon)的时区?Geonames.org对我来说不够稳定:(我需要这个在PHP中工作.
谢谢
gis ×10
google-maps ×2
kml ×2
mysql ×2
2d ×1
algorithm ×1
d3.js ×1
distance ×1
file-format ×1
geocoding ×1
geojson ×1
geolocation ×1
geometry ×1
javascript ×1
kmz ×1
location ×1
math ×1
php ×1
postgis ×1
postgresql ×1
python ×1
shapefile ×1
timezone ×1
topojson ×1
xml ×1