一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Arcpy腳本——基于Arcgis實(shí)現(xiàn)shp/gdb等到火星/百度坐標(biāo)系的轉(zhuǎn)換

 印度阿三17 2019-08-29

? 在生產(chǎn)中,會(huì)遇到將我們既有的坐標(biāo)系轉(zhuǎn)換到高德或者百度坐標(biāo)系下,從而可以使用百度高德的基礎(chǔ)地圖。亦或者將獲得的百度高德數(shù)據(jù)轉(zhuǎn)換到普通的84坐標(biāo)系下。本文基于Arcpy腳本實(shí)現(xiàn)了對(duì)shp或者gdb數(shù)據(jù)的坐標(biāo)系之間的相互轉(zhuǎn)換。

1、從常用坐標(biāo)系到百度高德坐標(biāo)系的轉(zhuǎn)換

思路如下:
1)讀取原始數(shù)據(jù)的坐標(biāo)系;
2)利用Arcpy將原始坐標(biāo)轉(zhuǎn)換成WGS84經(jīng)緯度;
3)對(duì)于線和面,利用Arcpy對(duì)數(shù)據(jù)進(jìn)行修復(fù);
4)逐個(gè)取點(diǎn),將WGS84經(jīng)緯度轉(zhuǎn)換成高德或者百度坐標(biāo)系。

# -*- coding:UTF-8 -*-
import arcpy, os
import ConvertLag_Lat as CVLL
import sys
reload(sys)
sys.setdefaultencoding('utf8')

#輸入工作空間
in_features = arcpy.GetParameterAsText(0)
#輸出的空間坐標(biāo)系
outCSStr=arcpy.GetParameterAsText(1)
#輸出工作空間
output_folder = arcpy.GetParameterAsText(2)

outCS=arcpy.SpatialReference(4326)
arcpy.BatchProject_management(in_features, output_folder, outCS)
arcpy.env.workspace = output_folder
transType=0
if(outCSStr=='wgs84'):
  arcpy.AddMessage("transform succeed")
elif(outCSStr=='gaode'):
  arcpy.AddMessage("target coords gaode")
  transType='3'
elif(outCSStr=='baidu'):
  transType='6'
  arcpy.AddMessage("target coords baidu")
arcpy.AddMessage("start transforming......")
featureclasses = arcpy.ListFeatureClasses()
for fc in featureclasses:
  cur= arcpy.UpdateCursor(fc)
  SR= arcpy.Describe(fc).spatialReference
  des = arcpy.Describe(fc)
  arcpy.RepairGeometry_management(fc)
  fc_count=int(arcpy.GetCount_management(fc).getOutput(0))
  arcpy.AddMessage(fc_count)
  arcpy.SetProgressor("step", "transform " fc,0, fc_count, 1)
  if des.shapeType.upper()=='POINT':
    for r in cur:
      geom = r.getValue("SHAPE")
      r.setValue("SHAPE",CVLL.offsetPoint(geom,transType))
      cur.updateRow(r)
      arcpy.SetProgressorPosition()
    del r,cur 
  elif des.shapeType.upper()=='POLYLINE':   
    for r in cur:
      geom = r.getValue("SHAPE")
      r.setValue("SHAPE",CVLL.offsetLine(geom,SR,transType))  
      cur.updateRow(r)
      arcpy.SetProgressorPosition()
    del r,cur 
  elif des.shapeType.upper()=='POLYGON':   
    for r in cur:
      geom = r.getValue("SHAPE")
      r.setValue("SHAPE",CVLL.offsetPolygon(geom,SR,transType))
      cur.updateRow(r)
      arcpy.SetProgressorPosition()
    del r,cur
  arcpy.AddMessage(fc " transform finished")

2、百度高德與WGS84互轉(zhuǎn)

import arcpy, os
import ConvertLag_Lat as CVLL
import sys
reload(sys)
sys.setdefaultencoding('utf8')

#input path of folder where all shapefiles reside in
in_fold = arcpy.GetParameterAsText(0)
output_folder = arcpy.GetParameterAsText(1)
outCSStr= arcpy.GetParameterAsText(2)
outCS=arcpy.SpatialReference(4326)

arcpy.env.workspace = in_fold
#copy data
featureclasses = arcpy.ListFeatureClasses()
for fc in featureclasses:
  arcpy.Copy_management(fc,output_folder "\\" fc)
arcpy.env.workspace=output_folder

transType='0'
if(outCSStr=='mars2baidu'):
  transType='1'

elif(outCSStr=='baidu2mars'):
  transType='2'

elif(outCSStr=='mars2baidu'):
  transType='3'

elif(outCSStr=='mars2wgs84'):
  transType='4'

elif(outCSStr=='baidu2wgs'):
  transType='5'

elif(outCSStr=='wgs2baidu'):
  transType='6'


arcpy.AddMessage("transfor type is " str(transType))
featureclasses = arcpy.ListFeatureClasses()
for fc in featureclasses:
  cur= arcpy.UpdateCursor(fc)
  SR= arcpy.SpatialReference(4326)
  des = arcpy.Describe(fc)
  arcpy.RepairGeometry_management(fc)
  fc_count=int(arcpy.GetCount_management(fc).getOutput(0))
  arcpy.SetProgressor("step", "transform " fc,0, fc_count, 1)
  if des.shapeType.upper()=='POINT':
    for r in cur:
      geom = r.getValue("SHAPE")
      r.setValue("SHAPE",CVLL.offsetPoint(geom,transType))
      cur.updateRow(r)
      arcpy.SetProgressorPosition()
    del r,cur 
  elif des.shapeType.upper()=='POLYLINE':   
    for r in cur:
      geom = r.getValue("SHAPE")
      r.setValue("SHAPE",CVLL.offsetLine(geom,SR,transType))  
      cur.updateRow(r)
      arcpy.SetProgressorPosition()
    del r,cur 
  elif des.shapeType.upper()=='POLYGON':   
    for r in cur:
      geom = r.getValue("SHAPE")
      r.setValue("SHAPE",CVLL.offsetPolygon(geom,SR,transType))
      cur.updateRow(r)
      arcpy.SetProgressorPosition()
    del r,cur
  arcpy.AddMessage(fc " transform finished")

不足

這里有幾個(gè)方面的不足
1)我使用的是git上給出的坐標(biāo)轉(zhuǎn)換方式,經(jīng)測(cè)試轉(zhuǎn)換后有米級(jí)的誤差;
2)這里用的是取點(diǎn)在重組的方式,因此對(duì)于弧,多部件要素的支持不行,只能支持對(duì)簡(jiǎn)單的點(diǎn)線面進(jìn)行轉(zhuǎn)換。
這里給出源碼,希望有需要的人可以繼續(xù)優(yōu)化完善。

來(lái)源:https://www./content-4-422401.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    91在线播放在线播放观看| 亚洲一区二区亚洲日本| 欧美大粗爽一区二区三区| 日本加勒比中文在线观看| 99日韩在线视频精品免费| 国产精品香蕉一级免费| 日本高清不卡一二三区| 日本亚洲欧美男人的天堂| 美女极度色诱视频在线观看| 黄色国产自拍在线观看| 久久机热频这里只精品| 深夜少妇一区二区三区| 日韩精品区欧美在线一区| 亚洲欧美日韩国产自拍| 国产成人精品视频一二区| 一区二区福利在线视频| 能在线看的视频你懂的| 国产一区二区三区草莓av| 亚洲综合天堂一二三区| 国产欧美性成人精品午夜| 精品日韩av一区二区三区| 99久久精品国产麻豆| 色婷婷成人精品综合一区| 欧美韩国日本精品在线| 欧美成人久久久免费播放| 日本妇女高清一区二区三区| 乱女午夜精品一区二区三区 | 亚洲国产91精品视频| 国产欧美高清精品一区| 国产一区二区久久综合| 欧美日本亚欧在线观看| 欧美日韩国产另类一区二区| 亚洲中文字幕熟女丝袜久久| 欧美激情床戏一区二区三| 男人的天堂的视频东京热| 富婆又大又白又丰满又紧又硬| 国产精品大秀视频日韩精品| 精品视频一区二区不卡| 欧美在线观看视频免费不卡| 亚洲av日韩av高潮无打码| 免费一区二区三区少妇|