Создание WMS в Geoserver с Python - PullRequest
0 голосов
/ 18 марта 2020

Я хочу опубликовать 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)

Любая помощь будет отличной.

...