我正在开发一个简单的应用程序,我有100条客户地址记录。要求是有一个半径和地址字段。这两个字段将成为搜索客户的参数。
例如: 半径= 500英里,地址=纽约
结果应该是纽约附近500英里的客户。
答案 0 :(得分:1)
对于数学,当需要找到边界框时,您需要使用harvesine公式或空间索引。互联网和stackoverflow上的harvesine配方有很多例子。空间索引通常是边界框,矩形或正方形,可以使用空间填充曲线来减小尺寸并提高查询速度。阅读有关空间索引的信息:http://www.blog.notdot.net/2009/11/Damn-Cool-Algorithms-Spatial-indexing-with-Quadtrees-and-Hilbert-Curves。
答案 1 :(得分:1)
你应该首先在纽约标记一个位置,也许是在文本输入中搜索给出的默认位置或进行地理编码,用方向传递字符串,一旦你标记了那个点,你画了一个半径的圆圈您需要的,当您绘制此圆圈时,您计算客户地址的每条记录与中心之间的距离,如果结果等于或小于500英里,则在客户记录中添加标记。
例如地理编码(假设自动完成)类似于
<input type="text" id="prueba" size="50">
<div id="map-canvas" style="width:800px;height:550px"> </div>
google.maps.event.addListener(autocomplete, 'place_changed', function() {
var place = autocomplete.getPlace();
if (place.geometry.viewport) {
map.fitBounds(place.geometry.viewport);
} else {
map.setCenter(place.geometry.location);
map.setZoom(17);
}
marker.setPosition(place.geometry.location);
}
现在设置了你的中心点之后绘制一个圆并计算中心与每个记录位置之间的距离
var populationOptions = {
strokeColor: "#FF0000",
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: "#FF0000",
fillOpacity: 0.35,
map: map,
center: marker.getPosition(),
radius: 1000,
editable: true
};
circle = new google.maps.Circle(populationOptions);
从这里你可以计算距离
var distance = google.maps.geometry.spherical.computeDistanceBetween(circleCenter, yourPosition);
答案 2 :(得分:1)
另一种选择是对数据库进行距离计算。假设您有一个关系数据库,并且每个客户地址记录都有lat / long ...您可以对lat / long的输入地址进行地理编码,然后使用SQL查询来计算输入位置与客户之间的距离。然后按给定半径过滤查询结果。从查询结果来看,需要在地图上绘制过滤后的客户。
使用SQL计算距lat / long的距离有一些posts on S O。
您可以使用google.maps.Geocoder
对给定地址的纬度/经度进行地理编码。