Python 地理空间分析(形状文件中的lat-long)

Python 地理空间分析(形状文件中的lat-long),python,geospatial,shapely,geopy,fiona,Python,Geospatial,Shapely,Geopy,Fiona,这是我们的后续问题 这个问题类似于,但逆转拉特朗似乎已经解决了这个问题,但它对我没有帮助 Uber数据以lat/long表示,这是一个非常直接的正向,反向查找在geopandas中使用时给出地址 然而,问题是在shapefile中查找那些lat/long。Uber数据如下所示: Trip ID DateTime Stamp Lat Long 00001 2007-01-07T10:56:46+00:00 37.78611

这是我们的后续问题

这个问题类似于,但逆转拉特朗似乎已经解决了这个问题,但它对我没有帮助

Uber数据以lat/long表示,这是一个非常直接的正向,反向查找在geopandas中使用时给出地址

然而,问题是在shapefile中查找那些lat/long。Uber数据如下所示:

Trip ID   DateTime Stamp                Lat             Long

00001   2007-01-07T10:56:46+00:00       37.786117       -122.440119
00001   2007-01-07T10:56:50+00:00       37.786564       -122.440209
00001   2007-01-07T10:56:54+00:00       37.786905       -122.440270
00001   2007-01-07T10:56:58+00:00       37.786956       -122.440279
00002   2007-01-06T06:22:35+00:00       37.800224       -122.433520
00002   2007-01-06T06:22:39+00:00       37.800155       -122.434101
00002   2007-01-06T06:22:43+00:00       37.800160       -122.434430
00002   2007-01-06T06:22:47+00:00       37.800378       -122.434527
00002   2007-01-06T06:22:51+00:00       37.800738       -122.434598
00002   2007-01-06T06:22:55+00:00       37.800938       -122.434650
00002   2007-01-06T06:22:59+00:00       37.801024       -122.434889
00002   2007-01-06T06:23:03+00:00       37.800955       -122.435392
00002   2007-01-06T06:23:07+00:00       37.800886       -122.435959
00002   2007-01-06T06:23:11+00:00       37.800811       -122.436275
形状文件多边形边界如下所示

(5979385.645656899, 2110931.7279282957, 5988491.7629433125, 2116394.4427246302)
(5996757.772329897, 2104615.921334222, 6002126.622484565, 2111141.524096638)
(5994970.50687556, 2086244.426253125, 6004106.84030889, 2096245.441356048)
(6005060.663860559, 2117913.4127838016, 6010794.38500464, 2123410.4359104633)
(5999414.325087652, 2098231.5748509616, 6005330.746325642, 2103724.0536953807)
(5990180.636205971, 2101104.2121503055, 5997586.527562141, 2107405.9502029717)
(6005605.349122897, 2109599.6380728036, 6010954.164540723, 2115863.756778136)
(5997399.803198054, 2095859.3430468887, 6002045.244038388, 2100357.5978298783)
(6018974.499877974, 2121660.499777794, 6024740.999827892, 2131294.0001958013)
(5980891.2469763905, 2086337.3158311248, 5992333.58203131, 2097376.2589762956)
(5979838.815354228, 2109536.4948263764, 5990061.512428477, 2115435.3563882113)
(5996370.188459396, 2086085.1349050552, 6006040.649761483, 2089160.6310506314)
(6000325.210404977, 2087887.1444243789, 6011873.615785807, 2095773.4459089637)
(5980631.069675222, 2095815.8703648, 5992293.742215976, 2101164.5775151253)
(6010609.867329061, 2112785.889902383, 6015766.567317471, 2119365.8508238047)
(5991138.3905240595, 2086268.6489737183, 5998688.01650089, 2094657.981276378)
(6004790.221816152, 2100493.380038634, 6011576.786655068, 2109303.3404370546)
(5991505.183097556, 2091674.2884248793, 6000205.414384723, 2102574.580600634)
因此,polygon/polygon.contains(点)中的点不起作用。从数据上看,lat长度与shapely文件相比非常小,我不确定是否必须将一个单位转换为另一个单位,它看起来完全不同的公制:)下面是代码:

import fiona
import shapely
from shapely.geometry import Point
import geopy
from geopy.geocoders import Nominatim


from shapely.geometry import shape
fc = fiona.open('/home/user/geo/sfo_shapefile/planning_neighborhoods.shp')
print fc.schema
pol = fc.next()
for f in fc:
        print shape(f['geometry']).bounds
geom = shape(pol['geometry'])
print "Bigger poly shape" ,shape(pol['geometry']).bounds
geolocator = Nominatim()

for cords in open('/home/user/geo/uber/trips.tsv'):
        latlong = cords.split('\t')
        p = Point(float(latlong[3]),float(latlong[2]))
        p = Point(float(37.783383),float(-122.439594))
        if geom.contains(p):
                print geolocator.reverse(p).address

Uber data和SFO shapefile的链接在这里

第一个列表确实是经度/纬度(X/Y的正确顺序),后者位于一个未知定义的投影坐标系中,两个对的顺序将由该坐标系确定,尽管第一个对似乎是北向的(如果纬度高于约45度)因此,形状文件包含已投影的坐标。请阅读提供形状文件的网站,看看是否可以找到他们用于坐标的投影。从那里,如果你想要的话,你需要将其转换为lat/long。以下链接可能会帮助你:是的,正在调查,need从NAD83 403区(状态平面)转换为lat/long(WGS84)-有什么想法吗?似乎没有简单的方法!