คำถามติดแท็ก geopandas

โครงการโอเพ่นซอร์สเพื่อให้การทำงานกับข้อมูลภูมิสารสนเทศใน Python ง่ายขึ้น

2
แปลงแพนด้า DataFrame เป็น GeoDataFrame
ดูเหมือนว่าเป็นคำถามที่ง่าย แต่ฉันไม่สามารถหาวิธีการแปลง DataFrame แพนด้าเป็น GeoDataFrame สำหรับการเข้าร่วมเชิงพื้นที่ นี่คือตัวอย่างของสิ่งที่มีลักษณะข้อมูลของฉันเช่นใช้df.head(): Date/Time Lat Lon ID 0 4/1/2014 0:11:00 40.7690 -73.9549 140 1 4/1/2014 0:17:00 40.7267 -74.0345 NaN อันที่จริงแล้ว dataframe นี้ถูกสร้างขึ้นจาก CSV ดังนั้นหากง่ายต่อการอ่าน CSV ในฐานะ GeoDataFrame โดยตรงซึ่งก็ใช้ได้เช่นกัน
42 csv  geopandas  pandas 

5
GeoPandas: ค้นหาจุดที่ใกล้ที่สุดในดาต้าเฟรมอื่น
ฉันมี 2 geodataframes: import geopandas as gpd from shapely.geometry import Point gpd1 = gpd.GeoDataFrame([['John',1,Point(1,1)],['Smith',1,Point(2,2)],['Soap',1,Point(0,2)]],columns=['Name','ID','geometry']) gpd2 = gpd.GeoDataFrame([['Work',Point(0,1.1)],['Shops',Point(2.5,2)],['Home',Point(1,1.1)]],columns=['Place','geometry']) และฉันต้องการค้นหาชื่อของจุดที่ใกล้ที่สุดใน gpd2 สำหรับแต่ละแถวใน gpd1: desired_output = Name ID geometry Nearest 0 John 1 POINT (1 1) Home 1 Smith 1 POINT (2 2) Shops 2 Soap 1 POINT (0 2) Work ฉันพยายามทำให้การทำงานนี้ใช้ฟังก์ชัน lambda: …

3
การเพิ่ม GeoPandas Dataframe ไปยังตาราง PostGIS?
ฉันมี GeoPandas Dataframe ง่าย ๆ : ฉันต้องการอัปโหลด GeoDataframe นี้ไปยังตาราง PostGIS ฉันมีการตั้งค่าฐานข้อมูลพร้อมส่วนขยาย PostGIS แล้ว แต่ไม่สามารถเพิ่ม Dataframe นี้เป็นตารางได้ ฉันได้ลองทำสิ่งต่อไปนี้แล้ว: engine = <> meta = MetaData(engine) eld_test = Table('eld_test', meta, Column('id', Integer, primary_key=True), Column('key_comb_drvr', Text), Column('geometry', Geometry('Point', srid=4326))) eld_test.create(engine) conn = engine.connect() conn.execute(eld_test.insert(), df.to_dict('records'))

2
รับพื้นที่รูปหลายเหลี่ยมโดยใช้ geopandas?
ด้วยgeopandas GeoDataFrameรูปหลายเหลี่ยมที่มีชุดของฉันต้องการที่จะได้รับพื้นที่ในกม. sq ของแต่ละคุณสมบัติในรายการของฉัน นี่เป็นปัญหาที่พบได้บ่อยและวิธีแก้ปัญหาที่แนะนำตามปกติในอดีตเคยใช้shapelyและpyprojโดยตรง (เช่นที่นี่และที่นี่ ) มีวิธีการทำสิ่งนี้อย่างบริสุทธิ์geopandasหรือไม่?

3
การละลายรูปหลายเหลี่ยมขึ้นอยู่กับคุณลักษณะด้วย Python (หุ่นดีฟิโอน่า)?
ฉันพยายามสร้างฟังก์ชั่นที่ทำสิ่งเดียวกันกับที่ QGIS "ละลาย" ฟังก์ชั่น ฉันคิดว่ามันจะง่ายสุด ๆ แต่ก็ดูเหมือนจะไม่ดี ดังนั้นจากสิ่งที่ฉันรวบรวมได้การใช้ฟิโอน่ากับหุ่นดีควรเป็นตัวเลือกที่ดีที่สุดที่นี่ ฉันเพิ่งเริ่มยุ่งเกี่ยวกับไฟล์เวคเตอร์ดังนั้นโลกนี้ก็ค่อนข้างใหม่สำหรับฉันและไพ ธ อนเช่นกัน สำหรับตัวอย่างเหล่านี้ฉันทำงานกับ County shapefile ก่อตั้งขึ้นที่นี่http://tinyurl.com/odfbanu ดังนั้นนี่คือรหัสบางส่วนที่ฉันรวบรวม แต่ไม่สามารถหาวิธีที่จะทำให้พวกเขาทำงานร่วมกันได้ สำหรับตอนนี้วิธีที่ดีที่สุดของฉันคือต่อไปนี้ขึ้นอยู่กับ: https://sgillies.net/2009/01/27/a-more-perfect-union-continued.html มันใช้งานได้ดีและฉันได้รับรายชื่อของ 52 รัฐเป็นรูปทรงเรขาคณิตที่ดี โปรดแสดงความคิดเห็นหากมีวิธีที่ตรงไปข้างหน้ามากขึ้นในการทำส่วนนี้ from osgeo import ogr from shapely.wkb import loads from numpy import asarray from shapely.ops import cascaded_union ds = ogr.Open('counties.shp') layer = ds.GetLayer(0) #create a list of unique …

2
กำลังเข้าร่วม (concat) รายการของ dataframes ที่คล้ายกันใน geopandas หรือไม่
ฉันมีรายการของ dataframes โครงสร้างเดียวกันทั้งหมดและทั้งหมดเป็นรูปหลายเหลี่ยม ฉันจะเพิ่มพวกเขาทั้งหมดเข้าด้วยกันโดยใช้ geopandas ได้อย่างไร
15 python  geopandas 

1
เหตุใดการจัดระยะสั้นของ GEAP จึงไม่ทำงานอย่างที่คาดไว้
ฉันพยายามถ่ายสองบรรทัดโดยใช้ Shapely / Geopandas แต่ผลลัพธ์ของการจัดเรียงนั้นแปลกมาก ฉันเหนื่อย : import geopandas as gpd from shapely.geometry import * from shapely.ops import snap lines1 = gpd.GeoDataFrame.from_file('lines1.shp') lines1 = lines1.to_crs({'init': 'epsg:2227'}) lines2 = gpd.GeoDataFrame.from_file('lines2.shp') lines2 = lines2.to_crs({'init': 'epsg:2227'}) res = lines1 lines2_union = lines2.geometry.unary_union res.geometry = res.geometry.apply(lambda x: snap(x, lines2_union, 14)) res.to_file('result.shp', driver="ESRI Shapefile") และได้รับผลลัพธ์นี้: …

3
geopandas spatial เข้าร่วมช้ามาก
ฉันใช้รหัสด้านล่างเพื่อค้นหาประเทศ (และบางครั้งระบุ) สำหรับจุด GPS นับล้าน รหัสในปัจจุบันใช้เวลาประมาณหนึ่งวินาทีต่อจุดซึ่งช้ามากอย่างไม่น่าเชื่อ ไฟล์รูปร่างคือ 6 MB ฉันอ่านว่า geopandas ใช้ rtrees สำหรับการรวมเชิงพื้นที่ทำให้พวกมันมีประสิทธิภาพอย่างเหลือเชื่อ แต่สิ่งนี้ดูเหมือนจะไม่ทำงานที่นี่ ผมทำอะไรผิดหรือเปล่า? ฉันหวังเป็นพันคะแนนต่อวินาทีหรือมากกว่านั้น สามารถดาวน์โหลด shapefile และ csv ได้ที่นี่ (5MB): https://www.dropbox.com/s/gdkxtpqupj0sidm/SpatialJoin.zip?dl=0 import pandas as pd import geopandas as gpd from geopandas import GeoDataFrame, read_file from geopandas.tools import sjoin from shapely.geometry import Point, mapping,shape import time #parameters shapefile="K:/.../Shapefiles/Used/World.shp" …

6
การอ่านข้อมูลดิบลงใน geopandas
เป็นไปได้ไหมที่จะอ่านข้อมูลดิบลงใน a geopandas GeoDataFrame, a la a pandas DataFrame? ตัวอย่างเช่นงานดังต่อไปนี้: import pandas as pd import requests data = requests.get("https://data.cityofnewyork.us/api/geospatial/arq3-7z49?method=export&format=GeoJSON") pd.read_json(io.BytesIO(r.content)) สิ่งต่อไปนี้ไม่: import geopandas as gpd import requests data = requests.get("https://data.cityofnewyork.us/api/geospatial/arq3-7z49?method=export&format=GeoJSON") gpd.read_file(io.BytesIO(r.content)) กล่าวอีกนัยหนึ่งเป็นไปได้ไหมที่จะอ่านข้อมูลเชิงพื้นที่ที่อยู่ในหน่วยความจำโดยไม่บันทึกข้อมูลนั้นลงดิสก์ก่อน

1
การนับคุณสมบัติเป็นจุดตัดของ Shapely Polygons
ฉันมีgeopandas GeoDataFrameที่ประกอบด้วยหุ่นเชิดPolygonและMultiPolygonรูปปั้นนับร้อย รูปหลายเหลี่ยมซ้อนกันในหลายสถานที่ ฉันต้องการสร้างรูปทรงเรขาคณิตใหม่ที่มีการนับจำนวนของพวกเขาทับซ้อนกัน บางสิ่งเช่นนี้ ใครบ้างมีความคิดสำหรับวิธีการวิธีการนี้ ฉันไม่สามารถเห็นทางเข้า ในที่สุดฉันต้องการน้ำหนักรูปหลายเหลี่ยมโดยเฉพาะอย่างยิ่งเพื่อให้รูปหลายเหลี่ยมบางส่วนอาจมีค่าเป็น 2 ด้วยตัวเอง การทำเช่นนี้กับshapelyเขตข้อมูล Z อาจจะดี นอกเหนือ: ฉันไม่ได้ผูกติดอยู่กับห้องสมุดใด ๆ เป็นพิเศษมันเป็นที่ที่ฉันไปจบแล้ว พิกัดในรูปทรงเรขาคณิตเหล่านี้คือพิกัดพิกเซลจริง ๆ แล้วฉันกำลังสะดุดเพื่อทำให้แรสเตอร์ซ้อนทับในรูปภาพอื่น ฉันต้องการทำให้รอยเท้าของฉันเล็กที่สุดเท่าที่จะเป็นไปได้เนื่องจากฉันต้องการที่จะสามารถปรับใช้สิ่งนี้กับเซิร์ฟเวอร์คลาวด์ ฯลฯ ซึ่งฉันอาจไม่สามารถติดตั้งสิ่งของแบบสุ่มได้

3
GeoPandas / Shapely ทำงานในพื้นที่และระยะทางเท่าใด
ดูเหมือนคำถามงี่เง่า แต่ฉันไม่สามารถหาคำตอบที่ชัดเจนเกี่ยวกับสิ่งที่: geopandas หน่วย / หุ่นดีใช้คำนวณระยะทาง / พื้นที่ระหว่างวัตถุ?

1
GeoPandas to_file () บันทึก GeoDataFrame โดยไม่ต้องมีระบบพิกัด
ฉันมี GeoPandas 0.2.1 py27_0 ฟิโอน่า 1.7.0 np110py27_1 Python 2.7.10 ติดตั้งในสภาพแวดล้อม Anaconda 2-4.1.1-Windows-x86 ฉันสามารถสร้างได้GeoDataFrameโดยการอ่านชุดข้อมูลอินพุตและใช้งานข้อมูล แต่การบันทึกชุดข้อมูลเอาต์พุตไม่รักษาระบบพิกัดไว้ import geopandas as gpd world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres')) world.to_file(driver='ESRI Shapefile',filename=r'C:\GIS\Temp\world_out.shp') สิ่งworld_out.shpนี้มีคุณลักษณะและสกีมาของซอร์สไฟล์รูปร่าง แต่ระบบพิกัดไม่ได้ถูกกำหนด ( <Unknown>) world_out.prjไฟล์ 0 KB และไม่ได้มีอะไร out = gpd.read_file(r'C:\GIS\Temp\world_out.shp') print out.crs >>> {} ฉันทดสอบเพื่อใช้งานโดยใช้ฟิโอน่าบริสุทธิ์และใช้งานได้ดีโดยรักษาcrsข้อมูลไว้: import fiona datasrc_path = r'C:\Program Files (x86)\ArcGIS\Desktop10.4\TemplateData\TemplateData.gdb' with fiona.drivers(): with fiona.open(datasrc_path,layer='cities') …

1
Python: Break linestring ขึ้นอยู่กับสภาพ
ฉันมี dataframe ของ geopandas ซึ่งเป็นพวงของ linestrings ที่มีข้อมูลบางอย่างที่เกี่ยวข้องกับจุดยอด / จุดแต่ละจุด: Point_x = (Lat, Lon, Time, ID, Data1, Data2, Data3) คะแนนจะถูกแปลงเป็น linestrings ตาม ID และเรียงตามเวลา ฉันต้องการทำลาย linestrings ตรงจุดที่ตรงกับเงื่อนไข ตอนนี้คือเมื่อระยะทางระหว่างคะแนนมากกว่าค่าบางอย่าง ในอนาคตอาจเป็นที่ที่ฟังก์ชันของเขตข้อมูลเป็นค่าบางอย่าง ตัวอย่างเช่นแบ่ง linestring เมื่อ Speed ​​ข้าม 5 kph ปัญหาในปัจจุบันคือบางแทร็กเกิดจากจุดที่มี ID ซ้ำกันดังนั้นการวิ่งย้อนกลับไปมาในระยะทางไกลและฉันต้องการให้ขีดแบ่งเส้นแบ่งเหล่านี้ ความคิดใด ๆ เกี่ยวกับวิธีที่ถูกต้องในการจัดโครงสร้างนี้หรือไลบรารี / วิธีการที่อาจใช้ dataframe มีแทร็กมากกว่า 150k ที่มีหลายจุดต่อแทร็คดังนั้นประสิทธิภาพจะดี นี่คือตัวอย่างของแทร็ก DF: ID …

2
กรองตามขอบเขตใน geopandas หรือไม่
ฉันมี dataframe geopandas ใน EPSG: 4326 และฉันจะสร้าง dataframe ขึ้นใหม่ซึ่งประกอบด้วยแถวทั้งหมดที่อยู่ในกล่องที่ จำกัด ก่อนอื่นฉันจะได้รับ bounding box ที่ฉันสนใจ (ซึ่งจริงๆแล้วคือ bounding box ของ dataframe อื่น): print df_sussex.total_bounds [ -1.57239292 50.57467674 0.14528384 51.27465152] จากนั้นฉันสร้าง dataframe ที่ประกอบด้วยกล่อง bounding เท่านั้น: pts = gpd.GeoDataFrame(df_sussex.total_bounds) และในที่สุดฉันก็ลองเอาฟีเจอร์ทั้งหมดที่ตัดกับกล่องขอบนั้น: sac_sussex = gpd.overlay(pts, df_sac, how='intersection') AttributeError: No geometry data set yet (expected in column …
11 python  geopandas 

1
Geopandas Line Polygon Intersection
ฉันกำลังพยายามหาจุดที่หลายเส้นตัดกันรูปหลายเหลี่ยมสำหรับตำแหน่งทางภูมิศาสตร์ที่แตกต่างกันสองแห่ง: from shapely.geometry import Polygon, LineString import geopandas as gpd polygon = Polygon([(0, 0), (1, 0), (1, 1), (0, 1), (0, 0)]) line1 = LineString([(0.5, 0.5), (0.7, 0.7)]) line2 = LineString([(0.9, 0.9), (0.2, 0.6)]) poly_gdf = gpd.GeoDataFrame(geometry=[polygon]) line_gdf = gpd.GeoDataFrame(geometry=[line1, line2]) นี่คือลักษณะทางภูมิศาสตร์ด้านบนที่มีลักษณะ (หนึ่งมีรูปหลายเหลี่ยมและอีกสองบรรทัดมี) ดูเหมือนว่าฉันทั้งสองเส้นตัดกันรูปหลายเหลี่ยม: อย่างไรก็ตามเอาต์พุตตัดกันนั้นสับสนมาก: print(line_gdf.intersects(poly_gdf)) 0 จริง 1 เท็จ …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.