>>> import numpy as np >>> from matplotlib.path import Path >>> arabian = np.genfromtxt('standard-plates/Arabian.txt', names=['lon', 'lat'], ... dtype=float, comments=':') ... >>> polygon1 = Path([(lon, lat) for lon, lat in arabian]) >>> for city, coord in cities.items(): ... if polygon1.contains_point([coord[1], coord[0]]): ... print(f'{city} is in Arabian plate!')
使用 Shapely 的代码如下:
1 2 3 4 5 6 7 8 9 10 11
>>> import numpy as np >>> from shapely.geometry import Point >>> from shapely.geometry.polygon import Polygon >>> arabian = np.genfromtxt('standard-plates/Arabian.txt', names=['lon', 'lat'], ... dtype=float, comments=':') ... >>> polygon2 = Polygon([(lon, lat) for lon, lat in arabian]) >>> for city, coord in cities.items(): ... point = Point(coord[1], coord[0]) ... if polygon2.contains(point): ... print(f'{city} is in Arabian plate!')
>>> import json >>> from shapely.geometry import Point >>> from shapely.geometry.polygon import Polygon >>> plates = {} >>> for name in ['African', 'Antarctic', 'Arabian', 'Australian', 'Caribbean', ... 'Cocos', 'Eurasian', 'Indian', 'Juan', 'Nazca', 'North_Am', ... 'Pacific', 'Philippine', 'Scotia', 'South_Am']: ... withopen(f'new/{name}.json') as j_f: ... plates[name] = json.load(j_f) ... >>> boundaries = {} >>> for name, info in plates.items(): ... boundaries[name] = [] ... for frag in info['fragments']: ... poly = Polygon(frag) ... boundaries[name].append(poly) ... >>> for city, coord in cities.items(): ... point = Point(coord[1], coord[0]) ... for name, bound in boundaries.items(): ... ifany(frag.contains(point) for frag in bound): ... print(f'{city} is in {name}!')
以上代码的输出为:
Beijing is in Eurasian! Dubai is in Arabian! Honolulu is in Pacific! Johannesburg is in African! Mumbai is in Indian! New York is in North_Am! Paris is in Eurasian! Rio is in South_Am! Sydney is in Australian!