Tengo dos capas con las mismas definiciones de características llamadas lyr
y lyr_add
. Estas capas fueron pobladas desde un servidor de mapas basado en JSON. Me gustaría añadir todas las características de lyr_add
a lyr
, pero, cuando uso lyr.CreateFeature(feature)
para un solo feature
no se adjunta. Me gustaría anexar las características a la lyr
antes de escribirlo en un archivo. La ejecución de mi python script no da lugar a ningún error o excepción. ¿Qué debo modificar en mi código para añadir con éxito las características?
Una versión abreviada de mi código que he intentado es:
import ogr
import os
import sys
import urllib, json
os.chdir(r'C:\Users\pipi\Documents\Rogaine')
xmin = 16501408.594
ymin = -4372525.989
xmax = 16520000
ymax = -4320000
extent = str(xmin) + ',' + str(ymin) + ',' + str(xmax) + ','+ str(ymax)
dict = {}
dict['Creek_Unnamed']=49
def count(url):
"""Returns a count of all of the features within the provided boundary"""
url_count = '&where=1%3D1&returnCountOnly=true'
url = url + url_count
response = urllib.urlopen(url)
data = json.loads(response.read())
count = data[u'count']
return count
def object_list(url):
"""Returns a list of the OBJECTID'S for all of the features within the provided boundary"""
url_id = '&returnIdsOnly=true'
url = url + url_id
response = urllib.urlopen(url)
data = json.loads(response.read())
list = data['objectIds']
return list
url_server = "http://maps.six.nsw.gov.au/arcgis/rest/services/sixmaps/LPIMap/MapServer/"
url_2 = "/query?geometry="
url_3 = "&geometryType=esriGeometryEnvelope"
url_4 = "&f=pjson"
for key in dict:
url = url_server + str(dict[key]) + url_2 + extent + url_3 + url_4
count = count(url)
if count == 0:
pass
else:
ds = ogr.Open(url)
lyr = ds.GetLayer()
if count > 1000:
object_list = object_list(url)
low_bound = object_list[x*1000]
if ((x+1)*1000) > count:
up_bound = object_list[-1]
else:
up_bound = object_list[((x+1)*1000-1)]
url_loop = "&where=OBJECTID+>%3D+" + str(low_bound) + "+AND+OBJECTID+<%3D+" +str(up_bound)
url_2 = url + url_loop
ds_add = ogr.Open(url_2)
lyr_add = ds_add.GetLayer()
for i in range(0, lyr_add.GetFeatureCount()):
feature = lyr_add.GetFeature(i)
lyr.CreateFeature(feature)
del ds_add
del ds, lyr