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

Shapely เป็นแพ็กเกจ Python แบบโอเพ่นซอร์สสำหรับการก่อสร้างและการวิเคราะห์วัตถุทางเรขาคณิตระนาบ 2D ที่ใช้ร่วมกับระบบข้อมูลทางภูมิศาสตร์

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

3
ตรวจสอบว่าจุดหนึ่งอยู่ในหลายรูปหลายเหลี่ยมด้วย Python หรือไม่
ฉันได้ลองหลายตัวอย่างของรหัสโดยใช้ไลบรารีเช่น shapefile, fiona และ ogr เพื่อพยายามตรวจสอบว่ามีจุด (x, y) อยู่ในขอบเขตของรูปหลายเหลี่ยมที่สร้างด้วย ArcMap (และในรูปแบบ shapefile) อย่างไรก็ตามไม่มีตัวอย่างใดที่ทำงานได้ดีกับมัลติโพลิกอนถึงแม้ว่ามันจะใช้ได้ดีกับรูปร่างหลายเหลี่ยมแบบปกติ ตัวอย่างบางส่วนที่ฉันพยายามอยู่ด้านล่าง: # First example using shapefile and shapely: from shapely.geometry import Polygon, Point, MultiPolygon import shapefile polygon = shapefile.Reader('shapefile.shp') polygon = polygon.shapes() shpfilePoints = [] for shape in polygon: shpfilePoints = shape.points polygon = shpfilePoints poly = …

5
การติดตั้ง GEOS และหุ่นดีบน Windows
เมื่อพยายามติดตั้ง Shapely บนคอมพิวเตอร์ Windows 64 บิตของฉันฉันไม่สามารถทำให้ไลบรารี GEOS ทำงานได้ จนถึงตอนนี้ฉันได้เรียกใช้ตัวติดตั้ง OSGeo4W ซึ่งฉันติดตั้ง GDAL (ฉันเชื่อว่ามีไลบรารีทางภูมิศาสตร์รวมอยู่ในแพ็คเกจนั้น) หลังจากนั้นฉันตรวจสอบและฉันมี geos_c.dll ในC:\OSGeo4W\binไดเรกทอรีของฉันแต่ฉันไม่ได้ทำตามขั้นตอนการกำหนดค่าบางอย่างหรือไลบรารีไม่ทำงาน ฉันต้องการหุ่นดีในการทำงานดังนั้นฉันจึงวิ่งpip install shapelyหลังจากติดตั้ง GDAL และดูเหมือนว่าจะใช้งานได้ (แม้ว่าจะไม่สามารถหาไลบรารี C สำหรับ GEOS) ในรหัสของฉันฉันสามารถนำเข้า Shapely แต่เมื่อฉันพยายามที่จะใช้มันฉันได้รับข้อผิดพลาดบอกฉัน"geos.dll"ไม่พบ
12 qgis  python  gdal  shapely 

3
การหาจุดหลายเหลี่ยมหลายจุดใน Python อย่างมีประสิทธิภาพ
ฉันอยากได้จุดตัดของรูปหลายเหลี่ยมหลายอัน ใช้shapelyแพ็คเกจของ Python ฉันสามารถหาจุดตัดของรูปหลายเหลี่ยมสองรูปได้โดยใช้intersectionฟังก์ชัน มีฟังก์ชั่นที่มีประสิทธิภาพคล้ายกันเพื่อให้ได้จุดตัดของรูปหลายเหลี่ยมหลายรูปแบบหรือไม่? นี่คือข้อมูลโค้ดเพื่อทำความเข้าใจสิ่งที่ฉันหมายถึง: from shapely.geometry import Point coord1 = ( 0,0 ) point1 = Point(coord1) circle1 = point1.buffer(1) coord2 = ( 1,1 ) point2 = Point(coord2) circle2 = point2.buffer(1) coord3 = ( 1,0 ) point3 = Point(coord3) circle3 = point3.buffer(1) circle1.intersection(circle2)สี่แยกของวงกลมสองวงสามารถพบได้โดย ฉันสามารถหาจุดตัดของทั้งสามวงกลมcircle1.intersection(circle2).intersection(circle3)ได้ อย่างไรก็ตามวิธีนี้ไม่สามารถขายได้กับรูปหลายเหลี่ยมจำนวนมากเนื่องจากต้องใช้รหัสมากขึ้น ฉันต้องการฟังก์ชันที่ใช้รูปหลายเหลี่ยมหลายรูปแบบโดยพลการและคืนค่าจุดตัดของพวกมัน

2
การสร้าง Shapely MultiPolygons จาก shapefile MultiPolygons
ฉันกำลังอ่าน shapefile โดยใช้ฟิโอน่า: with fiona.open('data/boroughs/boroughs_n.shp') as source: mpolys = [p for p in source] candidate = polys[0]['geometry'] สิ่งนี้ให้ฉันตามที่มีรายการของพิกัดและพิมพ์ 'MultiPolygon' อย่างไรก็ตามฉันไม่แน่ใจว่าจะใช้ข้อมูลพิกัดเพื่อสร้าง Shapely MultiPolygon ได้อย่างไรเนื่องจากต้องการ a sequence of exterior ring and hole list tuples: [((a1, ..., aM), [(b1, ..., bN), ...]), ...]. มีวิธีที่ 'ถูกต้อง' ในการทำเช่นนี้โดยใช้ Fiona และ Shapely หรือไม่?
12 python  shapely  fiona 

4
ใช้หุ่นดี: แปลระหว่างรูปหลายเหลี่ยมและ MultiPolygons
[แก้ไข: การแก้ปัญหานี้เพียงเพื่อใช้ OGR เพื่ออ่านรูปร่างไฟล์ ดูตัวอย่างของ geographika] ใน Shapefile ของ ESRI ไม่มีความแตกต่างระหว่างรูปหลายเหลี่ยมและ MultiPolygons นอกจากนี้ไม่มีความแตกต่างที่ชัดเจนระหว่างหลุมภายในและวงแหวนภายนอก (นอกเหนือจาก "ความถนัด" ของรูปหลายเหลี่ยมที่กำหนด) ดังนั้นหลังจากอ่านไฟล์รูปร่างฉันมีรายการลำดับการประสานที่อธิบายวงแหวน แต่หากไม่มีการประมวลผลที่เข้มข้นกว่านี้ฉันไม่สามารถแยกแยะว่าวงแหวนใดเป็นวงแหวนภายนอกหลุมภายในหรือรูปหลายเหลี่ยมเพิ่มเติม ปรากฏว่าสำหรับหุ่นดี 's รูปหลายเหลี่ยมและ MultiPolygon ก่อสร้างจะต้องมีความแตกต่างที่ชัดเจนระหว่างภายนอกและแหวนภายในดังนั้นวิธีการที่ฉันควรจะย้ายจากรายการที่ไม่ชัดเจนของแหวนชุดสั่งซื้อของรูปหลายเหลี่ยมแยกออกจากกันกับที่กำหนดไว้อย่างชัดเจนภายในและแหวนภายนอก ? ในการสรุป: ถ้าฉันมีรายการรูปหลายเหลี่ยมของวง แต่ฉันไม่รู้ว่าวงแหวนใดที่เป็นรูในการตกแต่งภายในหรือเป็นรูปหลายเหลี่ยมที่แยกจากกัน ฉันกำลังมองหาโซลูชันอัลกอริทึมแบบง่ายที่ฉันสามารถนำไปใช้ในไพ ธ อนสามารถใช้ในการประมวลผลรูปหลายเหลี่ยมหลายร้อยใน ~ นาทีหรือน้อยกว่าและฉันทำเช่นนี้เพื่อดำเนินการแยกจำนวนมาก

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
การอ่านรูปทรงเรขาคณิตของ postgis ด้วยหุ่นดี
ฉันกำลังทำเวิร์กโฟลว์ขนาดเล็กในโน้ตบุ๊ก ipython ที่มี geopandas และ shapely ดึงข้อมูล geospatial จำนวนมากบางครั้งมาจาก shapefiles บางครั้งมาจาก postgis (ซึ่งมีการประมวลผลที่แพงกว่า) ตอนนี้ฉันก็ดึงตาราง postgis ไปเป็น python โดยใช้การsqlalchemyแปลงเรขาคณิตเป็น WKT ไปพร้อมกัน sql = """ SELECT ST_AsText(ST_Transform(the_geom,4326)) as newgeom,* FROM public.parcels2010_small limit 5; """ parcels = pd.read_sql(sql, engine) parcels +----+---------------------------------------------------+---------------------------------------------------+-----------+-------------+ | id | newgeom | the_geom | parcel_id | osm_node_id | +----+---------------------------------------------------+---------------------------------------------------+-----------+-------------+ …

2
วิธีสร้าง Shapely LineString จากสองจุด
หากมีสองจุดจากที่ฉันต้องการสร้างLineStringวัตถุตรง: from shapely.geometry import Point, LineString A = Point(0,0) B = Point(1,1) คู่มือหุ่นดีสำหรับLineStringรัฐ: ลำดับของPointอินสแตนซ์ไม่ใช่พารามิเตอร์ตัวสร้างที่ถูกต้อง A LineStringอธิบายโดยจุด แต่ไม่ประกอบด้วยอินสแตนซ์จุด ดังนั้นถ้าฉันมีสองจุดAและBมีวิธีที่สั้นกว่า / ดีกว่า / ง่ายกว่าในการสร้างเส้นABกว่าเดา "ดีที่สุด" ปัจจุบันของฉัน ... AB = LineString(tuple(A.coords) + tuple(B.coords)) ... ซึ่งดูค่อนข้างซับซ้อน มีวิธีที่ง่ายกว่านี้ไหม? ปรับปรุง ด้วย Shapely 1.3.2 ที่วางจำหน่ายวันนี้ข้อความข้างต้นจากคู่มือไม่ถูกต้องอีกต่อไป ดังนั้นจากนี้ไป AB = LineString([A, B]) ได้ผล !
11 python  shapely 

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 เท็จ …

2
หน่วยของคุณลักษณะความยาวหุ่นดีคืออะไร
ฉันทำการคำนวณความยาวของรูปหลายเหลี่ยมอย่างง่าย ๆ โดยใช้หุ่นดี: from shapely.geometry import LineString ... xy_list = [map(float,e) for e in xy_intm] line = LineString(xy_list) s = '%s,%s,%s' % (fr,to,line.length) พิกัดของฉันอยู่ใน WGS84 ฉันไม่สามารถหาข้อมูลเกี่ยวกับคุณลักษณะความยาวของหุ่นดีได้ หน่วยของคุณสมบัติความยาวคืออะไร? มีวิธีง่าย ๆ ในการแปลงเป็นกม. หรือเมตรหรือไม่?
11 shapely  length  units 

5
Python, ห้องสมุดรูปร่างดี: เป็นไปได้ไหมที่จะทำการเลียนแบบรูปหลายเหลี่ยมรูปร่าง?
ฉันพยายามสร้างสี่เหลี่ยมผืนผ้าที่หมุนในพิกัดละติจูด / ลองจิจูด โดยทั่วไปฉันมีพิกัดของจุดศูนย์กลางและมุมการหมุนรอบจุดศูนย์กลาง เป็นไปได้ที่จะใช้, หุ่นดีหรือ gdal หรืออย่างอื่น?

3
รูปหลายเหลี่ยมข้าม dateline นานาชาติ [-180 .. + ลองจิจูด 180]
ฉันพยายามที่จะสร้างรูปหลายเหลี่ยมสำหรับ swaths วงโคจรของดาวเทียม จนถึงตอนนี้ฉันมีวิธีในการสร้างสองบรรทัดซึ่งแสดงถึงขอบของแต่ละ swath ใน [lat, long] บางส่วนของแนวเขตข้อมูลข้ามประเทศและล้อมรอบ: ฉันสามารถแก้ปัญหานี้ด้วยogr2ogr -wrapdateline: ogr2ogr -wrapdateline -f "ESRI Shapefile" test.shp orbits.shp ซึ่งจะแบ่งเส้นอาจ ตอนนี้ฉันต้องการที่จะสามารถสร้างรูปหลายเหลี่ยมในการตกแต่งภายในของทั้งสองสาย ตัวอย่างเช่นในกรณีที่ขอบหนึ่งของ swath ข้ามเส้นข้อมูลรูปหลายเหลี่ยมเติมเมื่อเกิดขึ้นในอีกด้านหนึ่งเช่น: ฉันต้องการวิธีการที่เป็นไปโดยอัตโนมัติตามที่ฉันต้องการเพื่อทำงานซ้ำมาก โดยเฉพาะอย่างยิ่งในงูหลามเนื่องจากเป็นวิธีที่ฉันสร้างบรรทัด นี่คือสองไฟล์รูปร่างที่มีเส้น: wraparound ; datelinefixed

3
“ โลภ” ตัดเส้นด้วยรูปหลายเหลี่ยม
ฉันต้องการคลิปชุด polylines (เส้นสีดำในภาพด้านล่าง) ไปยังขอบเขตด้านนอกของรูปหลายเหลี่ยม ควรละเว้นช่องว่างใด ๆ ภายในรูปหลายเหลี่ยม ผลลัพธ์ที่ดีที่สุดของฉันคือเส้นสีเหลืองประ บรรทัดเริ่มต้นอาจจะหรืออาจจะไม่ตรง ภาพเป็นตัวอย่างที่เรียบง่าย แต่ในความเป็นจริงรูปหลายเหลี่ยมนั้นซับซ้อนกว่ามากและมีหลายร้อยบรรทัด ฉันไม่คิดว่าตัวเรือนูนจะทำงานได้ (แต่ฉันอาจผิด) ฉันเปิดให้แก้ปัญหาใน arcgis, qgis, arcpy, หุ่นดี ฯลฯ การเขียนโปรแกรมจะอยู่ในหลามโดยฉันเปิดให้ตัวเลือกอื่น ๆ หากจำเป็น Arcgis น่าจะดีกว่าที่จะทำให้เพื่อนร่วมงานของฉันแบ่งปันเครื่องมือได้ง่ายขึ้น แต่ไม่ใช่ข้อกำหนด สิ่งที่ดีที่สุดที่ฉันคิดได้ในตอนนี้คือการตัดเส้นแต่ละเส้นด้วยรูปหลายเหลี่ยมที่สร้างชุดของจุดที่จุดตัดของขอบเขตทั้งหมด เรียงคะแนนตามระยะทางถึงจุดเริ่มต้นของบรรทัด จุดที่อยู่ไกลและใกล้ที่สุด (FAC) จะเป็นขอบเขตด้านนอกของรูปหลายเหลี่ยม จากนั้นใช้จุด FAC เพื่อเลือกจุดยอดที่เหมาะสมจากบรรทัดเดิมและสร้างเส้นประสีเหลืองจากจุดที่เหมาะสม ควรใช้งานได้ แต่ดูเหมือนจะซับซ้อนเกินความจำเป็น ความคิดเพิ่มเติมบางประการ: เส้นดังกล่าวเป็นเส้นตรง "เพียงพอ" ที่การคำนวณระยะทางง่าย ๆ ระหว่างจุดควรใช้งานไม่จำเป็นต้องมีการอ้างอิงเชิงเส้น นี่จะเป็นเรื่องง่ายใน arcpy ถ้ามีเครื่องมือในการแยกเส้นตรงจุด แต่ฉันไม่สามารถหาได้ คิดว่าทุกคน?

1
วิธีการแยกรูปหลายเหลี่ยมสองจุดแยกกันโดยค่าเฉลี่ยการแบ่งพื้นที่ที่ใช้ร่วมกัน (QGIS / python shapely)
ฉันมีรูปหลายเหลี่ยมสองอัน POLYGON ((- 5 -5, -5 5,5 5,5 -5, -5 -5)) POLYGON ((1 1, 1 7, 7, 7 7, 7 1, 1 1)) และต้องการแยกพวกเขาอย่างเท่าเทียมกัน ผลลัพธ์ควรแยกตามเส้นที่มีเครื่องหมายสีแดง ฉันใช้ qgis / python shapely และต้องการใช้ python
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.