gpt4 book ai didi

javascript - 有没有办法仅使用半正弦公式来过滤州/省/市/区内的坐标?

转载 作者:行者123 更新时间:2023-12-01 02:55:22 27 4
gpt4 key购买 nike

我已经实现了 Google map javascript api,通过将用户指定的 lat、lng、placeId 存储到数据库中来存储用户指定的位置列表。因此,用户可以找到某个地点半径范围内的地点(以公里/英里为单位)。

我正在使用基于此 Google map 教程的半正矢公式 https://developers.google.com/maps/solutions/store-locator/clothing-store-locator

我的问题是我想限制从 sql 查询返回的坐标,该查询也限制在一个州(或城市或地区)内,因为如果用户将点放在州边界附近,半正弦公式可能会返回坐标也来自其他州,这不是我想要的。我已经研究这个问题有一段时间了,似乎实现这一点的方法是将状态信息也存储到数据库中,我是对的吗?

或者通过 Google map javascript API 实现此目的有更好的方法吗?

谢谢

最佳答案

与在数据库中存储用户位置相同,您还应该有一个包含管理分区的表。 (例如,您可以通过 ESRI OpenData 免费获取状态)。

所以,如果您按照您提到的教程进行操作,我不得不猜测您正在使用 MySQL,并且您将点存储为带有 lat 的记录。和lng字段。足以在 map 上显示它们,但不足以使用空间交叉点。

商店的几何形状必须使用 ST_GeomFromText() 构建。例如

SELECT 
ST_GeomFromText(CONCAT('POINT(', lng, ' ', lat, ')' )) as markerposition
FROM markers;

然后,如果您有一个名为“us_states”的美国各州表,并且该表有 geom类型字段geometry ,您可以使用ST_Contains函数获取给定状态几何中包含的所有标记(在以下示例中,包含在加利福尼亚州):

SELECT * FROM markers
JOIN us_states ON ST_Contains(us_states.geom, ST_GeomFromText(CONCAT('POINT(', markers.lng, ' ', markers.lat, ')' )))
WHERE us_states.name='California';

现在,我想说这是正确的方法。但如果这对于你想要实现的目标来说太牵强,你也可以在前面这样做。如果您有 google.maps.Polygon表示状态的几何形状,您可以使用google.maps.geometry.poly.containsLocation方法来过滤要显示的标记,或者如果标记位于所述多边形之外则隐藏哪些标记。类似的东西

if (!google.maps.geometry.poly.containsLocation(marker.getPosition(), statePolygon)) {
marker.setMap(null);
}

关于javascript - 有没有办法仅使用半正弦公式来过滤州/省/市/区内的坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46738496/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com