-2

我正在开发一个简单的应用程序,其中有 100 条带有地址的客户记录。要求是具有半径和地址的字段。这两个字段将成为搜索客户的参数。

例如:半径 = 500 英里,地址 = 纽约

结果应该是纽约附近 500 英里的客户。

4

3 回答 3

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);
于 2012-11-12T19:18:22.133 回答
1

另一种选择是在数据库上进行距离计算。假设您有一个关系数据库,并且每个客户地址记录都有纬度/经度......您可以对输入地址进行地理编码以获取纬度/经度,然后使用 SQL 查询来计算输入位置与客户之间的距离。然后按给定的半径过滤查询结果。从查询结果来看,只需在地图上绘制过滤后的客户。

在 S O 上有几篇关于使用 SQL 计算从纬度/经度的距离的帖子。

您可以使用 对google.maps.Geocoder给定地址的纬度/经度进行地理编码。

于 2012-11-12T19:57:47.857 回答
1

对于数学,当可以找到边界框时,您需要 harvesine 公式或空间索引。互联网和stackoverflow上有很多关于harvesine公式的例子。空间索引通常是边界框、矩形或正方形,可以使用空间填充曲线来降低维度,提高查询速度。阅读空间索引: http: //www.blog.notdot.net/2009/11/Damn-Cool-Algorithms-Spatial-indexing-with-Quadtrees-and-Hilbert-Curves

于 2012-11-12T19:13:19.653 回答