30

次の GeoDataFrame があるとします。

h=pd.DataFrame({'zip':[19152,19047],
               'Lat':[40.058841,40.202162],
               'Lon':[-75.042164,-74.924594]})
crs='none'
geometry = [Point(xy) for xy in zip(h.Lon, h.Lat)]
hg = GeoDataFrame(h, crs=crs, geometry=geometry)
hg

       Lat          Lon     zip     geometry
0   40.058841   -75.042164  19152   POINT (-75.042164 40.058841)
1   40.202162   -74.924594  19047   POINT (-74.924594 40.202162)

別の GeoDataFrame で行ったように (このように) CRS を設定する必要があります。

c=c.to_crs("+init=epsg:3857 +ellps=GRS80 +datum=GGRS87 +units=mi +no_defs")

私はこれを試しました:

crs={'init': 'epsg:3857'}

この:

hg=hg.to_crs("+init=epsg:3857 +ellps=GRS80 +datum=GGRS87 +units=mi +no_defs")

...しかし、運が悪い。

いくつかの重要な注意事項:

  1. 上記の .to_crs メソッドが機能するもう 1 つの GeoDataFrame はシェープ ファイルからのもので、ジオメトリ列はポイントではなくポリゴン用でした。.to_crs メソッドが適用された後の「ジオメトリ」値は次のようになります。

    POLYGON ((-5973.005380655156 3399.646267693398... hg GeoDataFrame で上記を試しても、通常の緯度/経度座標のように見えます。

  2. これがうまくいった場合は、これらのポイントをポリゴン GeoDataFrame と連結して、両方 (ポリゴンの上のポイント) をプロットします。

  3. .to_crs メソッドを使用する前に最初に GeoDataFrames を連結してから、ポイント行とポリゴン行の両方で一度にメソッドを使用すると、次のエラーが発生します。

    ValueError: 単純なジオメトリを変換できません。最初にオブジェクトに crs を設定してください。

前もって感謝します!

4

3 に答える 3

59

Geopandas API がクリーンアップされ、驚くことなく動作するようになりました。必ず最新の安定版を使用し、ドキュメントを読んでください。

EPSG コードを使用して GeoDataFrame に CRS を設定するのは、次のように簡単です。

gdf.set_crs(epsg=4326, inplace=True)

はどこgdfですかgeopandas.geodataframe.GeoDataFrame。明示的なinplace!

したがって、上記の例では次のようになります。

import pandas as pd
from shapely.geometry import Point
from geopandas import GeoDataFrame

df = pd.DataFrame({'zip':[19152,19047],
               'Lat':[40.058841,40.202162],
               'Lon':[-75.042164,-74.924594]})

geometry = [Point(xy) for xy in zip(df.Lon, df.Lat)]
gdf = GeoDataFrame(df, geometry=geometry)

gdf.set_crs(epsg=4326, inplace=True)
# ^ comment out to get a "Cannot transform naive geometries" error below

# project to merkator
gdf.to_crs(epsg=3395)

     zip        Lat        Lon                          geometry
0  19152  40.058841 -75.042164  POINT (-8353655.485 4846992.030)
1  19047  40.202162 -74.924594  POINT (-8340567.652 4867777.107)
于 2018-08-30T18:02:32.917 に答える
4

答えはずっとここにありました:

hg=hg.to_crs(c.crs)

これにより、hg の crs が c の crs に設定されます。

于 2016-08-15T20:47:39.583 に答える