地點
本指南專注於 Overture places 資料 — 其內容、範圍、屬性和使用案例。若要解更多關於 Overture places 架構 的相關資料,請參見 架構參考文檔。
概要
Overture places 主題有一個特徵類型,稱為 place
,包含超過 5300 萬個真實世界實體的點表示:學校、商業、醫院、宗教組織、地標、山峰等。該主題源於 Meta 和 Microsoft 資料的合併,並在 CDLA Permissive 2.0 授權下提供。
Overture places 資料,按資料來源樣式:Meta 用紫色,Microsoft 用橙色。 |
主要來源 | 特徵數量(2024 年 7 月版本) |
---|---|
Meta | 約 4800 萬 |
Microsoft | 約 550 萬 |
資料集描述
所有 Overture 資料,包括地點資料,都以 GeoParquet 格式分發,這是一種基於 column-based 的資料結構。以下是地點特徵類型的屬性表。特別是 categories
屬性;我們提供了可用類別的完整列表 在這裡。
地點主題中 GeoParquet 檔案的架構
- places
欄位 | 類型 | 描述 |
---|---|---|
id | VARCHAR | 特徵 ID。如果該特徵代表的是 GERS(全球實體參考系統)的一部分,則此 ID 可能與 GERS 關聯。 |
geometry | BLOB | 地點位置的點表示。地點的幾何形狀必須是 GeoJSON schema 定義的點。 |
bbox | STRUCT | 由兩個經度和兩個緯度定義的區域:緯度為 -90.0 到 90.0 之間的十進制數;經度為 -180.0 到 180.0 之間的十進制數。 |
version | INTEGER | 特徵的版本號,在每次 Overture 版本更新中,當該特徵的幾何形狀或屬性發生變化時,版本號會遞增。 |
sources | STRUCT | 給定特徵屬性的源訊息數組,每個條目都是一個源對象,列出了 JSON 指標符號表示的屬性和該特定值來源的資料集。所有特徵必須有一個根級別的源,這是默認源,如果未指定特定屬性的源,則使用此默認源。 |
names | STRUCT | 定義特徵名稱的屬性。 |
categories | STRUCT | 地點的類別。完整列表可在 GitHub 上找到:https://github.com/OvertureMaps/schema/blob/main/task-force-docs/places/overture_categories.csv |
confidence | DOUBLE | 地點存在的信心程度。數值範圍是 0 到 1 之間。0 表示我們確定該地點不存在(或不再存在)。1 表示我們確定該地點存在。如果沒有任何值,代表我們還沒有任何可信的訊息。 |
websites | VARCHAR[] | 地點的網站。 |
socials | VARCHAR[] | 地點的社交媒體 URL。 |
emails | VARCHAR[] | 地點的電子郵件地址。 |
phones | VARCHAR[] | 地點的電話號碼。 |
brand | STRUCT | 地點的品牌。擁有多個品牌的位置被建模為多個獨立的地點,每個地點都有自己的品牌。 |
addresses | STRUCT | 地點的地址。 |
資料的存取和檢索
最新的地點資料可以從 AWS 或 Azure 獲取,格式為 GeoParquet,位於以下位置:
供應商 | 位置 |
---|---|
Amazon S3 |
|
Azure Blob Storage |
|
更多訊息可以在本文檔的 獲取 Overture 資料 部分找到。您可以直接從上述 S3 或 Azure 位置下載整個資料集。警告:輸出將是一個非常大的檔案。
根據您的使用情況,以下方法可能更實用:
- Python Command-line Tool
- DuckDB
首先,請遵循 Python Command-line Tool 的設定指南。
overturemaps download -f geoparquet --type=place -o places.geoparquet
首先,請遵循 DuckDB 的設定指南。
LOAD spatial;
LOAD httpfs;
-- Access the data on AWS in this example
SET s3_region='us-west-2';
COPY (
SELECT
*
FROM read_parquet('s3://overturemaps-us-west-2/release/2024-07-22.0/theme=places/*/*'))
TO 'places.parquet';
資料使用指南
我們建議僅下載您需要的 Overture 資料。如果您對特定的地理區域感興趣,有幾種選擇可以使用簡單的 bounding box 來提取地點資料並輸出 GeoJSON 檔案。
- Overture Maps Explorer
- Python Command-line Tool
- DuckDB
要快速查看和下載適量的資料,您可以使用 Overture Maps Explorer 網站。
要下載資料:移動到您感興趣的區域,關閉其他圖層,然後點擊 Download Visible
。
這樣將下載您螢幕上可見的區域。
首先,請按照 Python Command-line Tool的安裝指南 進行設定。
只需更改 bbox
值以下載特定區域。
overturemaps download --bbox=12.46,41.89,12.48,41.91 -f geojson --type=place -o rome.geojson
首先,請按照 DuckDB 的安裝指南 進行設定。
用新的 bounding box 替換 bbox.xmin
和 bbox.ymin
值,以針對不同區域執行查詢。
LOAD spatial;
LOAD httpfs;
-- Access the data on AWS in this example
SET s3_region='us-west-2';
COPY (
SELECT
id,
version,
-- We are casting these columns to JSON in order to ensure compatibility with our GeoJSON output.
-- These conversions may be not necessary for other output formats.
CAST(names AS JSON) AS names,
CAST(categories AS JSON) AS categories,
confidence,
CAST(websites AS JSON) AS websites,
CAST(socials AS JSON) AS socials,
CAST(emails AS JSON) AS emails,
CAST(phones AS JSON) AS phones,
CAST(brand AS JSON) AS brand,
CAST(addresses AS JSON) AS addresses,
CAST(sources AS JSON) AS sources,
ST_GeomFromWKB(geometry)
FROM read_parquet('s3://overturemaps-us-west-2/release/2024-07-22.0/theme=places/*/*')
WHERE
-- Point geometry doesn't require looking at both min and max:
bbox.xmin BETWEEN 12.46 AND 12.48 AND
bbox.ymin BETWEEN 41.89 AND 41.91
) TO 'rome_places.geojson' WITH (FORMAT GDAL, DRIVER 'GeoJSON', SRS 'EPSG:4326');
資料操作與分析
按屬性查詢
這些範例使用地址、類別和信心分數列中的資料屬性,以便通過 DuckDB 以有用的方式過濾資料。
- 按地址查詢
- 按類別查詢
- Query by confidence score
address
列可用於快速過濾資料到特定的政治單位。這個例子使用國家鍵來獲取所有在立陶宛的地址資料。區域也可以用來從較小的單位(例如美國州)中提取資料。
LOAD spatial;
LOAD httpfs;
-- Access the data on AWS in this example
SET s3_region='us-west-2';
COPY (
SELECT
-- we can parse addresses into columns to make further filtering of the data simpler
addresses[1].freeform as street,
addresses[1].locality as locality,
addresses[1].postcode as postcode,
addresses[1].region as region,
addresses[1].country as country,
*
FROM read_parquet('s3://overturemaps-us-west-2/release/2024-07-22.0/theme=places/*/*')
WHERE
addresses[1].country = 'LT'
) TO 'lithuania_places.parquet';
要按特定類型的地點過濾資料,我們可以使用 categories
列。在這個例子中,我們將提取所有類別為 rice_mill
或 flour_mill
的地點。
完整的類別列表可以在 這裡 找到。
LOAD spatial;
LOAD httpfs;
-- Access the data on AWS in this example
SET s3_region='us-west-2';
COPY (
SELECT
names.primary as primary_name,
confidence,
addresses,
websites,
geometry
FROM read_parquet('s3://overturemaps-us-west-2/release/2024-07-22.0/theme=places/*/*')
WHERE
categories.primary IN ('flour_mill', 'rice_mill')
) TO 'mills.parquet';
假設您只想要確定存在且準確的資料。我們可以使用 confidence
分數來過濾低於某個閾值的資料,以排除任何可疑資料。
LOAD spatial;
LOAD httpfs;
-- Access the data on AWS in this example
SET s3_region='us-west-2';
COPY (
SELECT
*
FROM read_parquet('s3://overturemaps-us-west-2/release/2024-07-22.0/theme=places/*/*')
WHERE
-- Only select data with a confidence score above .95
confidence > .95
-- Further filtering for data within Massachusetts to limit the size of this query
AND addresses[1].region = 'MA'
) TO 'MA_high_confidence_places.parquet';
進階範例
這些範例展示了一些將地點資料與其他資料集結合的使用案例。
- 與 OpenStreetMap 結合
- Find building addresses
Overture Places 可以作為一個有價值的來源,用於與您現有的資料集進行結合或增強。
在這個例子中,假設我們希望使用 OpenStreetMap 的 POI 進行一個項目,但希望用 Overture Places 的資料填補任何缺失的屬性,如地址或電話號碼。
通過一些基本的匹配邏輯,我們可以將這兩個資料集連接在一起,以創建一個更全面的最終產品。通過將 GERS ID 也連接到我們的輸出資料集,我們可以輕鬆地將現在合併的資料集與未來的 Overture 發行版本保持同步。
要自己執行此範例,可以從 Geofabrik 獲取 Oregon 的 PBF 檔案。
注意:將具有 CDLA Permissive 2.0 許可證的資料與 OSM 進行結合是被允許的,但結果資料可能需要遵循 Open Database License (ODbL) 如果它是一個衍生資料庫。請參閱 OSM Collective Database Guideline 瞭解更多訊息。
Query
LOAD spatial;
LOAD httpfs;
-- Access the data on AWS in this example
SET s3_region='us-west-2';
COPY (
-- We'll first select OSM data from Oregon with amenity = restaurant
WITH osm AS (
SELECT kind,
id,
tags->>'name' AS name,
tags->>'addr:housenumber' AS housenumber,
tags->>'addr:street' AS street,
tags->>'addr:postcode' AS postcode,
tags->>'addr:city' AS city,
tags->>'website' AS website,
tags->>'phone' AS phone,
lat,
lon,
tags
FROM st_readosm(
'oregon-latest.osm.pbf'
)
WHERE tags->>'amenity' = 'restaurant'
),
-- Then select Overture data with any category containing the word restauarant in Oregon.
overture AS (
SELECT id,
names.primary AS "names.primary",
websites[1] AS website,
socials[1] AS social,
emails[1] AS email,
phones[1] AS phone,
addresses[1].freeform AS freeform,
addresses[1].locality AS locality,
addresses[1].postcode AS postcode,
addresses[1].region AS region,
addresses[1].country AS country,
ST_GeomFromWKB(geometry) AS geometry
FROM read_parquet('s3://overturemaps-us-west-2/release/2024-07-22.0/theme=places/*/*')
WHERE region = 'OR'
AND country = 'US'
AND categories.primary ilike '%restaurant%'
)
-- Now that we have our input data we will join them together.
SELECT
-- With the GERS id joined to the final result this dataset can be quickly synced to future Overture releases
overture.id AS GERS_id,
osm.name,
-- Using CASE statements, we'll favor OSM data when it is present but use Overture data wherever there are gaps
CASE
WHEN osm.housenumber IS NOT NULL
OR osm.street IS NOT NULL THEN concat(osm.housenumber, ' ', osm.street)
ELSE overture.freeform
END AS address,
CASE
WHEN osm.city IS NOT NULL THEN osm.city
ELSE overture.locality
END AS city,
CASE
WHEN osm.postcode IS NOT NULL THEN osm.postcode
ELSE overture.postcode
END AS postcode,
CASE
WHEN osm.website IS NOT NULL THEN osm.website
ELSE overture.website
END AS website,
CASE
WHEN osm.phone IS NOT NULL THEN osm.phone
ELSE overture.phone
END AS phone,
overture.social,
overture.email,
ST_AsWKB(st_point(osm.lon, osm.lat)) AS geometry
FROM osm
-- To join the data, we'll first match features that have the same OR similar names
LEFT JOIN overture ON (
osm.name = overture."names.primary"
OR osm.name ilike concat('%', overture."names.primary", '%')
OR overture."names.primary" ilike concat('%', osm.name, '%')
OR damerau_levenshtein(osm.name, overture."names.primary") < 3
)
-- Then use a small buffer to match features that are nearby to each other
AND st_intersects(
st_buffer(overture.geometry::geometry, 0.003),
st_point(osm.lon, osm.lat)
)
) TO 'oregon_restaurants_combined.parquet';
如果您想要將地址資料附加到建築物上。可以查看 Overture addresses 主題,但我們先假設它沒有涵蓋您要找的區域。
places 主題具有廣泛的覆蓋範圍,許多地點點位特徵都有關聯的地址。通過使用交集,我們可以找到落在建築物內的地點,然後將地點的地址連接到建築物多邊形上。
Query
LOAD spatial;
LOAD httpfs;
-- Access the data on AWS in this example
SET s3_region='us-west-2';
COPY (
-- First query places with address data in the area we are interested in
WITH places AS
(
SELECT *
FROM read_parquet('s3://overturemaps-us-west-2/release/2024-07-22.0/theme=places/*/*')
WHERE bbox.xmin BETWEEN 14.38 AND 14.44
AND bbox.ymin BETWEEN 50.07 AND 50.11
AND addresses[1].freeform IS NOT NULL
),
-- Then get buildings in the same area
buildings as
(
SELECT *
FROM read_parquet('s3://overturemaps-us-west-2/release/2024-07-22.0/theme=buildings/type=building/*')
WHERE bbox.xmin > 14.38 AND bbox.xmax < 14.44
AND bbox.ymin > 50.07 AND bbox.ymax < 50.11
)
-- Join the data using an intersect and select distinct to avoid duplicates
SELECT distinct(buildings.id), buildings.*, places.addresses
FROM buildings
LEFT JOIN places on st_intersects(ST_GeomFromWKB(places.geometry), ST_GeomFromWKB(buildings.geometry))
ORDER BY buildings.id
) TO 'prague_places_in_buildings.parquet';
套件和工具
Rapid
Rapid 是一個 OpenStreetMap 編輯器,能夠通過參考 此處的指南 顯示地點資料作為參考圖層。
該授權與 OSM 兼容,這些資料可用於製作地圖。