在带有传单地图的网页上 - 我希望能够显示我的数据库对象,每个对象都有一个lat,lng。在地图上使用标记。
所以当我点击标记时,我想从db获取信息并显示它。
如何存储对象ID或将其与标记相关联,以便在单击标记时我可以从数据库加载对象并显示详细信息?
我知道我可以使用lat / lng来使用半径搜索来找到对象,但这不会起作用并且不准确,因为可能有多个具有相同lat / lng的对象。
答案 0 :(得分:2)
好的,基于@Ivar在另一个帖子中提供的答案:Leaflet: Add a link to the markers
将标记添加到地图后,可以直接将dbObject Id与标记关联。当标记添加到地图时,会为其分配一个名为" _leaflet_id"的ID。这可以通过目标对象获取,也可以在添加到地图后设置为自定义值。
现在,在标记OnClick事件中,您只需获取点击标记的ID,并使用它来查询数据库。
marker._leaflet_id = dbObjectId;
答案 1 :(得分:1)
不确定如何连接到您的数据库,但流程将是这样的:
抓住点击的点的lat / lng,然后将该信息发送到采用S2等空间几何lib的逻辑。在点击的点周围创建一个包络,并获得其lat / lng在该包络内的所有点,然后以你的点击点为最短球面距离的lat / lng为你的匹配。
我确信通过CartoDB或类似PostGIS之类的内容可以更轻松地完成此操作。
-
假设您的数据库对象设置在如下表中:
ID(guid) | 姓名 | 纬度 |的经度强>
fe124etc。|标记1 | 43.123 | -117.123
y75W2etc。|标记2 | 44.123 | -116.123
您执行上述方法,然后在获得所需的标记后,将其他数据库数据(名称,地址,w / e)发送回绑定到标记的弹出窗口。
另一种探索的途径是(取决于数据)你可以从中制作geoJSON层。 (leaflet geojson use)。如果这样做,您可以为每个点创建/存储/读取属性。
希望这会让它更加清晰。