Я хочу опубликовать sh шейп-файл полилинии для геосервера. Иногда это работает, иногда нет. Я не понимаю почему. Вот мой код для публикации sh:
def save_geoserver(data):
geoserver_uri = 'http://localhost:8080/geoserver'
from geoserver.workspace import ResourceInfo
cat = Catalog("http://localhost:8080/geoserver/rest", username='admin', password='geoserver')
wks_name = 'newWorkspaceName'
uri = geoserver_uri +"/"+ wks_name
store_name = 'newStore'
data = data
def check_workspace(workspace_name):
print("test for workspace")
check_workspace = False #create a variable to test if workspace exists already
if(cat.get_workspaces(workspace_name)):
print("found workspace")
check_workspace = True #set the variable to true, if workspace exists
return check_workspace
#check_workspace(wks_name)
check_store = False
# def create_data(store_name, data, data_name, wks_name):
# cat.create_featurestore(store_name, data, workspace=wks_name)
# cat.add_data_to_store(store=store_name, name=data_name, data=data, workspace=wks_name)
# print(store_name.workspace)
if check_workspace(wks_name): # if workspace exists, create the featurestore
# print("Workspace exists")
if(cat.get_store(store_name, workspace=wks_name)):
cat.add_data_to_store(store=store_name, name=store_name, data=data, workspace=wks_name)
print("Store found. Data has been written.")
else:
print("Store does not exist. Store has been created. Data has been written to the store.")
cat.create_featurestore(store_name, data, wks_name)
#create_data(store_name, data, "Test name", wks_name)
cat.add_data_to_store(store=store_name, name=store_name, data=data, workspace=wks_name)
else: #if workspace does not exists, create the workspace and the featurestore
cat.create_workspace(wks_name, uri)
#create_data(store_name, data, "Test name", wks_name)
cat.add_data_to_store(store=store_name, name=store_name, data=data, workspace=wks_name)
print("Workspace does not exist. Workspace and store have been created. Data has been written to the store.")
# try:
# cat.publish_featuretype(data, cat.get_store(store_name, wks_name),"GCS_WGS_1984")
# except Exception as e:
# print("Error: ", e)
save_geoserver(r'C:\Users\this-pc\Documents\Navoi\Navoi.zip')
Я вижу файлы, сохраненные в геосервере, но не могу получить к ним доступ через WMS, в JOSM. Я вижу один из файлов через WMS в JOSM, поэтому я смог это сделать. Возможно, я мог внести изменения, но теперь это не работает. ZIP-файл содержит файлы shp, .prj, .cpg, .dbf, .qpj, .shx. Я смог опубликовать sh ранее, когда я также использовал geo json, который я импортировал в QGIS, сохранил как шейп-файл, а затем создал архив. Одна из причин, по которой я думаю, что это не работает, заключается в том, что я создал скрипт для автоматического создания шейп-файла из файла json и его сохранения в zip-файле, не делая шагов вручную в QGIS. Я использовал библиотеку pyshp. Вы можете увидеть код ниже.
def write_shp(input, output):
geometries = []
with shapefile.Writer(output) as w:
w.field('FID', 'C')
for i in input['features']:
try:
geometries.append(i['geometry']['coordinates'])
#print("geometry: ", i['geometry']['coordinates'])
except Exception as error:
print("Error appending line to geometries list: ", error)
#print(len(geometries))
try:
for i in geometries:
w.line(geometries)
w.record(geometries.index(i)+1)
except Exception as error:
print("Error adding lines: ", error )
w.close()
def createPrjFile(shpFile):
try:
prjFile = open(shpFile + '.prj', 'w')
prjStr = 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]]'
prjFile.write(prjStr)
prjFile.close()
cpgFile = open(shpFile + '.cpg', 'w')
cpgStr = 'UTF-8'
cpgFile.write(cpgStr)
cpgFile.close()
qpjFile = open(shpFile + '.qpj', 'w')
qpjStr = 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]'
qpjFile.write(qpjStr)
qpjFile.close()
print("Additional files written succesfully.")
except Exception as error:
print("Error creating additional files: ", error)
def createZipFile(path):
zip_name = str(path.rsplit('\\', 1)[1])
print(zip_name)
files_list = []
for i in ['.dbf','.prj','.shx','.shp','.cpg','.qpj']:
files_list.append(zip_name+str(i))
#print(files_list)
try:
print("Creating a zip archive from shapefile and .dbf, .prj, .shx files")
zipObj = ZipFile(path+'.zip', 'w')
for item in files_list:
zipObj.write(path.rsplit('\\', 1)[0]+'\\' + item, arcname = item)
print("Shapefile has been archived to: ", path.strip() + ".zip")
zipObj.close()
except Exception as error:
print("Error saving to zip file: ", error)
Любая помощь будет отличной.