Как добавить уникальные всплывающие окна к каждому многоугольнику Geo JSON в Folium, используя Python - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь создать карту Фолиума со зданиями. Я хочу добавить всплывающее окно к каждому зданию на основе соответствующего ему свойства openbare_ruimte. Однако код, который я написал, добавляет одно и то же всплывающее окно ко всем зданиям.

Я проконсультировался с несколькими потоками по этому вопросу ( # 1023 , # 1060 , # popups , # popups2 ), но не удалось заставить его работать.

Кто-нибудь знает, как я могу добавить свойство openbare_ruimte каждого здания в его всплывающее окно? ?

import json
import requests
import folium

url = "http://geodata.nationaalgeoregister.nl/bag/wfs?service=wfs&version=2.0.0&request=GetFeature&outputFormat=json&count=25&srsName=epsg:4326&typeName=bag:verblijfsobject&cql_filter=%28bag:woonplaats=%27Groningen%27%29"
js_data = json.loads(requests.get(url).text)


m = folium.Map(location=[53.2193835, 6.5665018], zoom_start=13)

fg = folium.map.FeatureGroup(name='Buildings').add_to(m)

#Add the polygons features to the FeatureGroup layer
for feature in js_data['features']:
    fg.add_child(folium.GeoJson(feature['properties']['pandgeometrie']))

#Add popups to the FeatureGroup layer
for feature in js_data['features']:
    fg.add_child(folium.Popup(feature['properties']['openbare_ruimte']))


folium.LayerControl().add_to(m)

m

1 Ответ

1 голос
/ 25 марта 2020

Если я правильно понимаю, вы хотите, чтобы каждое здание предоставляло всплывающее окно с указанием его адреса (улица, я полагаю).

Этот код, кажется, делает то, что вы хотите:

import json
import requests
import folium

url = "http://geodata.nationaalgeoregister.nl/bag/wfs?service=wfs&version=2.0.0&request=GetFeature&outputFormat=json&count=25&srsName=epsg:4326&typeName=bag:verblijfsobject&cql_filter=%28bag:woonplaats=%27Groningen%27%29"
js_data = json.loads(requests.get(url).text)


m = folium.Map(location=[53.2193835, 6.5665018], zoom_start=13)

fg = folium.map.FeatureGroup(name='Buildings').add_to(m)

for feature in js_data['features']:
    b = folium.GeoJson(feature['properties']['pandgeometrie'])
    b.add_child(folium.Popup(feature['properties']['openbare_ruimte']))
    fg.add_child(b)


folium.LayerControl().add_to(m)

m

и в качестве примера вы получаете:

enter image description here

...