【Day 20】QGIS + OSM + folium part 2

看看昨天的图层

我们将图层输出(Export)成 GeoJSON,点开来可以看到这些 json 的文字讯息

{
{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {
        "full_id": "n1839325691",
        "osm_id": 1839325691,
        "osm_type": "node",
        "amenity": "kindergarten",
        "short_name": null,
        "name:nan-TL": null,
        "name:nan-POJ": null,
        "name:nan": null,
        "language:zh": null,
        "operator:type": null,
        "full_name": null,
        "alt_name": null,
        "addr:unit": null,
        "toilets": null,
        "wheelchair:description": null,
        "start_date": null,
        "capacity": null,
        "name:th": null,
        "official_name": null,
        "disused:name": null,
        "disused:amenity": null,
        "wheelchair": null,
        "toilets:wheelchair": null,
        "layer": null,
        "opening_hours": null,
        "name:fa": null,
        "facebook": null,
        "email": null,
        "level": null,
        "wikipedia": null,
        "wikidata": null,
        "old_name": null,
        "name:ja": null,
        "preschool": null,
        "name:zh": null,
        "name:en": null,
        "operator": null,
        "religion": null,
        "denomination": null,
        "addr:floor": null,
        "website": null,
        "phone": null,
        "fax": null,
        "branch": null,
        "addr:full": null,
        "addr:street": null,
        "addr:postcode": null,
        "addr:housenumber": null,
        "addr:housename": null,
        "addr:district": null,
        "addr:country": null,
        "addr:city": null,
        "office": null,
        "name": "达人托儿所"
      },
      "geometry": {
        "type": "Point",
        "coordinates": [
          121.5715472,
          25.0840952
        ]
      }
    },

但其实我们到这边把刚刚的 GeoJSON 汇入进去会出现:

会是一个很酷的地理位置 JSON 档。

所以我们到底要怎麽用它

我们来写一个程序点出(pin) 自己的位置跟某个学校的位置!

import folium # 汇入 folium 套件
import json

self_coordinates = [25.01206450477216, 121.5414458747392]
fitness_coordinates = []

fmap = folium.Map(location=self_coordinates, zoom_start=15)

fmap.save("test.html")

会以自己设定的座标为正中心的位置,如下图。

这样看不出来自己到底位置在哪里,那我们加个东西!

已经可以看出我把自己定位在台科大

import folium # 汇入 folium 套件
import json

self_coordinates = [25.01206450477216, 121.5414458747392]
fitness_coordinates = []

fmap = folium.Map(location=self_coordinates, zoom_start=15)

tooltip ='请点选我检视该点资讯'

popup = folium.Popup('目前所在地', max_width=500)

folium.Marker(location = self_coordinates,
              popup=popup,
              icon=folium.Icon(color='red')).add_to(fmap)
fmap.save("test.html")
  • folium.map.Popup(html=None, parse_html=False, max_width='100%', show=False, sticky=False, **kwargs)
    • Parameters
      1. html (string or Element) – Popup 里面的文字
      2. max_width (int for pixels or text for percentages, default '100%') – 整数,Popup 最大宽度。
      3. show (bool, default False) – Loading 这个页面之後是否直接显示(default: False

搭配 GeoJSON

import folium # 汇入 folium 套件
import json

self_coordinates = [25.01206450477216, 121.5414458747392]
fitness_coordinates = []

fmap = folium.Map(location=self_coordinates, zoom_start=15)

tooltip ='请点选我检视该点资讯'

popup = folium.Popup('目前所在地', max_width=500)

folium.Marker(location = self_coordinates,
              popup=popup,
              icon=folium.Icon(color='red')).add_to(fmap)

path = 'school.geojson'
with open(path, 'r', encoding='utf-8') as f:
    school = json.load(f) # taipei_fitness type :dict

school_list = school['features'] # 我们要找的是 key: feature
school_coordinates = []

for mark in school_list:
    mark['geometry']['coordinates'].reverse()

    school_coordinates.append(mark['geometry']['coordinates'])

for m in school_coordinates:
    folium.Marker(location=m,
                  icon=folium.Icon(color='blue')).add_to(fmap)


fmap.save("test.html")


我们也可以透过 程序码 来把每一个点都点出来


明天可以继续来讲解如何透过这些 feature 来算,可能距离我们最近的学校等等等等。
有很多功能都可以搭配一起进来,也可以透过这个计算位址,传送回 Line Chatbot


<<:  【从实作学习ASP.NET Core】Day23 | 前台 | Session 购物车 (1)

>>:  【Side Project】 订单清单 - 资料库新增状态栏位

Day 7:持续拆解主类别

上一篇漏掉了一个主类别的函数: void anotherInstanceStarted (const...

30天打造品牌特色电商网站 Day.12 一定要有的导览列

导览列(Navigation)是每个网站必要且重要的元件,当使用者进到网页想马上找寻想要的资讯,好的...

Day12 经常搞混的CSS Position

每次要用到绝对定位和相对定位时,我都会忘记他们分别代表的是什麽,又再google一次,这次决定好好把...

[ Day 30 ] - 初学者升级啦~完赛心得

初学者升级啦 YA!30天了~代表我连续 30 天学习 JS 了!(拍手~) 第一次参加铁人赛,其实...

【教练我想写 C#】啊我就想用 VS Code 开发啊 !

最近因为工作的需求需要写 C#, 就是QA Q 到写 C# 的概念, 想说可以边学习边做个纪录顺便分...