You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.6 KiB
48 lines
1.6 KiB
# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. |
|
# |
|
# Licensed under the Apache License, Version 2.0 (the "License"); |
|
# you may not use this file except in compliance with the License. |
|
# You may obtain a copy of the License at |
|
# |
|
# http://www.apache.org/licenses/LICENSE-2.0 |
|
# |
|
# Unless required by applicable law or agreed to in writing, software |
|
# distributed under the License is distributed on an "AS IS" BASIS, |
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
# See the License for the specific language governing permissions and |
|
# limitations under the License. |
|
|
|
# reference: https://zhuanlan.zhihu.com/p/378918221 |
|
|
|
try: |
|
from osgeo import gdal, ogr, osr |
|
except: |
|
import gdal |
|
import ogr |
|
import osr |
|
|
|
|
|
def translate_vector(geojson_path: str, |
|
wo_wkt: str, |
|
g_type: str="POLYGON", |
|
dim: str="XY") -> str: |
|
ogr.RegisterAll() |
|
gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES") |
|
data = ogr.Open(geojson_path) |
|
layer = data.GetLayer() |
|
spatial = layer.GetSpatialRef() |
|
layerName = layer.GetName() |
|
data.Destroy() |
|
dstSRS = osr.SpatialReference() |
|
dstSRS.ImportFromWkt(wo_wkt) |
|
ext = "." + geojson_path.split(".")[-1] |
|
save_path = geojson_path.replace(ext, ("_tmp" + ext)) |
|
options = gdal.VectorTranslateOptions( |
|
srcSRS=spatial, |
|
dstSRS=dstSRS, |
|
reproject=True, |
|
layerName=layerName, |
|
geometryType=g_type, |
|
dim=dim) |
|
gdal.VectorTranslate(save_path, srcDS=geojson_path, options=options) |
|
return save_path
|
|
|