ฉันจะแปลงเชพไฟล์เป็นขอบเขตละติจูดและลองจิจูดได้อย่างไร


12

ฉันมี shapefile ของเขตการปกครองของประเทศและฉันต้องการแยกอาร์เรย์ของละติจูดและลองจิจูดสำหรับแต่ละแผนก .. มันเป็นไปได้ไหมที่จะทำ?


โปรดอธิบาย: คุณมีไฟล์รูปร่างหรือไฟล์Excelหรือไม่
whuber

1
ชื่อไม่ได้สะท้อนถึงคำถามของคุณจริงๆโปรดคิดถึงการแก้ไข
DavidF

ฉันมี
รูปร่าง

คำตอบ:


25

การใช้โมดูล ogr Python จาก OSGEO ตัวอย่างนี้จะให้ tuple ที่มี coords ที่กำหนดซองจดหมายสำหรับแต่ละคุณสมบัติ

from osgeo import ogr

ds = ogr.Open("mn_counties.shp")
lyr = ds.GetLayerByName("mn_counties")

lyr.ResetReading()

for feat in lyr:
    # get bounding coords in minx, maxx, miny, maxy format
    env = feat.GetGeometryRef().GetEnvelope()
    # get bounding coords in minx, miny, maxx, maxy format
    bbox = [env[0], env[2], env[1], env[3]]
    print env
    print bbox
    print

2
... และงูเหลือมเชิงพื้นที่ฟรีที่; /
DavidF

4

วิธีหนึ่งที่เป็นไปได้ในการใช้ SAGA GIS ต่อไปhttp://www.saga-gis.org หลังจากเปิด shapefile ของคุณให้รัน 3 โมดูลเหล่านี้: 1. Modules \ Shapes \ Tools \ Get Shapes

  1. Modules \ Shapes \ Tools \ Points \ Points จากเส้น [ตรงกันข้ามกับชื่อที่แนะนำคุณสามารถใช้สิ่งนี้เพื่อรับคะแนนจากรูปหลายเหลี่ยม]

  2. Modules \ Shapes \ Tools \ Points \ เพิ่มพิกัดไปยังจุดนี้จะให้ตารางซึ่งมีพิกัด x และ y ของมุมทั้งสี่ของกล่องขอบเขตของไฟล์รูปหลายเหลี่ยมของคุณ


4

ใน arcgis นี่คือรหัสไพ ธ อน ผลลัพธ์คือรายการของ minx, miny, maxx, maxy, minM, maxM, minZ, maxZ (

import arcpy
for feat in arcpy.SearchCursor(r"c:\data\f.gdb\counties"):
    print feat.Shape.extent

-2.66852727251546 49.4265363633626 -2.52848181818121 49.5079454546192 NaN NaN NaN NaN
-10.463336363782 51.4455454544593 -6.01305454583045 55.3799909091533 NaN NaN NaN NaN
-4.77778181827614 54.0555454544593 -4.35347272688468 54.4100000000002 NaN NaN NaN NaN

4

นี่คือเวอร์ชั่น R โดยใช้ข้อมูลตัวอย่างจากแพ็คเกจ rgdal:

library(rgdal)
dsn <- system.file("vectors/ps_cant_31.MIF", package = "rgdal")[1]
d <- readOGR(dsn = dsn, layer="ps_cant_31")

## transform if this is not longlat
if (is.projected(d)) d <- spTransform(d, CRS("+proj=longlat +ellps=WGS84"))

for (i in 1:nrow(d)) {
  print(bbox(d[i,]))    
}

1

ฉันใช้ฟิโอน่าและหุ่นดีสำหรับงานประเภทนั้น:

import fiona
from shapely.geometry import shape

with fiona.open(r'd:\Projects\_00_Data\_USstates\fe_2007_us_state00.shp', 'r') as features:
    for i, feat in enumerate(features):
        geom = shape(feat['geometry'])
        name = feat['properties']['NAME00']
        print ','.join((name,) + tuple([str(i) for i in geom.bounds]))

ไม่ได้ให้ Lat / Lon
harvpan

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