У мене є форма файлів підрозділів країни, і я хотів би отримати масив обмежувальних lat і lon для кожного підрозділу .. чи можна це зробити?
У мене є форма файлів підрозділів країни, і я хотів би отримати масив обмежувальних lat і lon для кожного підрозділу .. чи можна це зробити?
Відповіді:
Використовуючи модуль ogr Python від OSGEO, у цьому прикладі ви отримаєте кортеж, що містить координати, які визначають конверт для кожної функції.
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
Один із можливих способів продовжити використання SAGA GIS http://www.saga-gis.org Після відкриття файлу форми запустіть ці 3 модулі: 1. Модулі \ Форми \ Інструменти \ Отримати розмір форми
Модулі \ Фігури \ Інструменти \ Окуляри \ Окуляри від рядків [всупереч тому, що підказує назва, ви також можете використовувати це, щоб отримати точки з багатокутника]
Модулі \ Фігури \ Інструменти \ Точки \ Додавання координат до точок. Це дасть вам таблицю, яка містить координати x та y 4 кутів рамки рамки вашого файла багатокутника.
У аркгізі ось код пітона. результат - список 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
Ось версія 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,]))
}
Я використовую Фіону та витончено для таких завдань:
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]))