tôi có một shapefile của các phân vùng quốc gia và tôi muốn trích xuất một mảng lat và lon giới hạn cho mỗi phân chia .. điều đó có thể làm được không?
tôi có một shapefile của các phân vùng quốc gia và tôi muốn trích xuất một mảng lat và lon giới hạn cho mỗi phân chia .. điều đó có thể làm được không?
Câu trả lời:
Sử dụng mô-đun Python ogr từ OSGEO, ví dụ này sẽ cung cấp cho bạn một bộ dữ liệu có chứa các hợp đồng xác định đường bao cho mỗi tính năng.
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
Một cách có thể để tiến hành sử dụng SAGA GIS http://www.saga-gis.org Sau khi mở shapefile của bạn, hãy chạy 3 mô-đun này: 1. Mô-đun \ Hình dạng \ Công cụ \ Nhận phạm vi hình dạng
Mô-đun \ Hình dạng \ Công cụ \ Điểm \ Điểm từ các dòng [trái với những gì tên gợi ý bạn cũng có thể sử dụng điều này để lấy điểm từ đa giác]
Mô-đun \ Hình dạng \ Công cụ \ Điểm \ Thêm tọa độ cho điểm Điều này sẽ cung cấp cho bạn một bảng chứa tọa độ x và y của 4 góc của hộp giới hạn của tệp đa giác của bạn.
Trong arcgis, đây là mã python. kết quả là một danh sách 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
Đây là phiên bản R, sử dụng dữ liệu mẫu từ gói 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,]))
}
Tôi sử dụng fiona và tạo hình cho các nhiệm vụ đó:
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]))