Как создать всплывающее окно на карте фолиума, используя данные из файла json? - PullRequest
1 голос
/ 07 марта 2020

Как мне go создать всплывающее окно на карте фолиума для отображения информации об узлах? Как показано ниже, моя карта фолиума в настоящее время извлекает данные из файла json, который я скачал с overpass turbo. Отсюда и синий контур зданий на карте. У меня возникли проблемы с созданием всплывающего окна, чтобы при щелчке пользователя по зданию появлялось всплывающее окно для отображения информации, например, в режиме турбо-перехода. В настоящее время я пытаюсь получить всю информацию в «свойствах», но мои коды ничего не делают, так как при попытке щелкнуть здание вместо всплывающего окна щелчок по карте просто увеличит масштаб.

* PS мой текущий GUI основан на ответе, предоставленном мне на другой вопрос, который я написал " Как включить карту фолиума в окно приложения PyQt5? "

Карта Фолиума

enter image description here

КОД

 with open('exportBuildings.geojson') as access_json:
            read_content = json.load(access_json)

 feature_access = read_content['features']


# Creating folium map
for feature_data in feature_access:
            buildingName = feature_data['properties']

m = folium.Map(location=[1.400150, 103.910172], titles="Punggol", zoom_start=17)
nodeData = os.path.join('exportFULL.geojson')
folium.GeoJson(nodeData).add_child(folium.Popup(buildingName))
folium.GeoJson(nodeData).add_to(m)
data = io.BytesIO()
m.save(data, close_file=False)
self.view.setHtml(data.getvalue().decode())

JSON ФОРМАТ

"type": "Feature",
  "properties": {
    "@id": "way/768461439",
    "building": "train_station",
    "layer": "1",
    "name": "Damai LRT",
    "wikidata": "Q7313275",
    "wikipedia": "en:Damai LRT station"
  },

1 Ответ

0 голосов
/ 07 марта 2020

Объяснение:

Проблема в том, что вы создаете 2 элемента Geo JSON:

<b>folium.GeoJson(nodeData)</b>.add_child(folium.Popup(buildingName))
<b>folium.GeoJson(nodeData)</b>.add_to(m)

В первом вы добавляете всплывающее окно как дочернее, но не добавляете его к карте, во второй вы добавляете ее на карту, но у нее нет всплывающего окна, то есть на карте будет отображаться только Geo Json без всплывающего окна.

Решение:

Решение состоит в том, чтобы создать только Geo Json, в котором элемент добавляется, а всплывающее окно устанавливается как дочернее:

geo_json = folium.GeoJson(nodeData)
geo_json.add_child(folium.Popup(buildingName))
geo_json.add_to(m)

, которое использует свойства add_to () и add_child (), которые возвращает тот же элемент может быть уменьшен до:

folium.GeoJson(nodeData).add_to(m).add_child(folium.Popup(buildingName))

Или

folium.GeoJson(nodeData).add_child(folium.Popup(buildingName)).add_to(m)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...