markdown Python GIS演算关连ライブラリまとめ
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown Python GIS演算关连ライブラリまとめ相关的知识,希望对你有一定的参考价值。
# OSRMを利用してマップマッチング
## OSRM起動
```
$ sudo docker run -i -p 5000:5000 -v $(pwd):/data osrm/osrm-backend osrm-routed --algorithm mld /data/kansai-latest.osrm
```
## OSRM動作確認
```py
def test_server():
url = "http://" + SERVER_ADDRESS + "/route/v1/driving/13.388860,52.517037;13.397634,52.529407;13.428555,52.523219?overview=false"
r = requests.get(url)
result = r.json()
if result['code'] != 'Ok':
print("Error", result['code'])
return result
```
## geopandas dataframeを(lon,lat)のtupleへ
```py
def gdf2xy_tuple_list(gdf, geom="position"):
return [ (row[geom].coords[0][0],row[geom].coords[0][1]) for i,row in gdf.iterrows() ]
```
## mapmatching xy tuple list -> mapmached tuple list
```py
def request_mapmatching(xy_tuple_list):
out_str = ""
for point in xy_tuple_list:
lon = point[0]
lat = point[1]
out_str += str(lon)+","+str(lat)+";"
url = "http://" + SERVER_ADDRESS + "/match/v1/car/" + out_str[:-1]
r = requests.get(url)
result = r.json()
if result['code'] != 'Ok':
print("Error", result['code'])
return None
result_xy_tuple_list = []
trace_points = result['tracepoints']
for i, trace_point in enumerate(trace_points):
if trace_point is None:
result_xy_tuple_list.append(xy_tuple_list[i])
else:
loc = trace_point['location']
result_xy_tuple_list.append((loc[0], loc[1]))
return result_xy_tuple_list
```
## Mapbox
##### Mapbox Mapmatching API
PythonからGETリクエストを投げる.
```
import requests
MAPBOX_ACCESS_TOKEN = "*"
def request_mapmatching(point_list):
out_str = ""
for point in point_list:
lon = point[0]
lat = point[1]
out_str += str(lon)+","+str(lat)+";"
url = "https://api.mapbox.com/matching/v5/mapbox/walking/" + out_str[:-1]
url_param = {'access_token': MAPBOX_ACCESS_TOKEN }
r = requests.get(url,params=url_param)
result = r.json()
if result['code'] != 'Ok':
print("Error", result['code'])
return result
```
## Folium
Leaflet + OpenStreetMapを利用した地理データの可視化ライブラリ.
##### 点群表示
```py
%matplotlib inline
%config InlineBackend.figure_format='retina'
import matplotlib.pyplot as plt
import folium
m = folium.Map(location=[34.8, 135.5], zoom_start=12, tiles='cartodbpositron')
for i, row in point_gdf.iterrows():
lon, lat = row.geometry.coords[0]
folium.CircleMarker(location=[lat,lon],radius=2,color='#00FF00',fill=True, fill_color='#FF0000', opacity='0.9').add_to(m)
```
## Geopandas
pandasに空間データ型を追加したライブラリ.
内部ではデータ型にShapelyを利用している.
##### Pandas Dataframe -> GeoPandas DataFrame
```py
import pandas as pd
import geopandas as gpd
def convert_dataframe_to_geodataframe(df, lon_column_name, lat_column_name):
""" Convert pandas LonLat DataFrame to GeoPandas DataFrame """
geometry = [Point(xy) for xy in zip(df[lon_colomun_name], df[lat_colomun_name])]
crs = {'init':'epsg:4326'}
gdf = gpd.GeoDataFrame(df, crs=crs, geometry=geometry)
return gdf
```
##### PostGISのデータをGeoPanda DataFrameとして読み込む
```py
import geopandas as gpd
import psycopg2
con = psycopg2.connect(database="", user="", password="", host="") # set db connection
sql = """
SELECT position FROM observations
WHERE position IS NOT NULL;
"""
gdf = gpd.GeoDataFrame.from_postgis(sql, con, geom_col='positon')
```
geom_colで指定するカラムにNULLが存在するとエラーになるので注意.
###### 参考:geopandas経由ではなく直接SQLを実行する
```
cur = con.cursor()
cur.execute(sql)
```
###### 参考:pandas data frameとして読み込む
```
import pandas as pd
df = pd.read_sql(sql, con, index_col='id')
```
## pyproj
座標系・測地系変換を行うライブラリ.
##### 緯度経度(WGS84)で指定した2地点間の直線距離(meter)を求める
```
from pyproj import Geod
def calculate_lonlat_distance(lon1, lat1, lon2, lat2):
q = Geod(ellps='WGS84')
fa, ba, d = q.inv(lon1,lat1, lon2,lat2)
return d
```
以上是关于markdown Python GIS演算关连ライブラリまとめ的主要内容,如果未能解决你的问题,请参考以下文章
markdown kaggle关连
markdown 网络关连
markdown CSS设计ガイドライン
markdown 画像のEXIF情报をコマンドラインで取得
markdown 自作ライブラリをプロジェクトに取り込む
markdown 苹果にMySQL的クライアントをインストールする