SikuliXで認識した座標を緯度・経度に変換する

Multi-Xには日本測量協会の電算プログラム検定取得済みのXY座標⇔経緯度変換機能があります。

このXY座標⇔経緯度変換機能を使わずに、画面右下に表示しているマウス位置の測量座標をSikuliXで文字認識後、緯度・経度に変換してみました。

経緯度への変換はPROJ.4という変換ライブラリを使用しました。

実行結果です。
PROJ.4は10進数で緯度経度を表していたので60進数に変換した値も表示するようにしました。

結果その1

結果その2

結果その3

# coding: utf-8
import sys
reload(sys)
import datetime
sys.setdefaultencoding('utf-8')
load("proj4j-0.1.0.jar")
import org.osgeo.proj4j.CRSFactory as CRSFactory
import org.osgeo.proj4j.CoordinateReferenceSystem as CoordinateReferenceSystem
import org.osgeo.proj4j.CoordinateTransform as CoordinateTransform
import org.osgeo.proj4j.CoordinateTransformFactory as CoordinateTransformFactory
import org.osgeo.proj4j.ProjCoordinate as ProjCoordinate

def DegToDms(dd):
    deg = int(dd)
    min = int((dd - deg) * 60)
    sec = ((dd - deg ) * 60 - min) * 60
    return str(deg),str(min),str(sec)

crsFactory = CRSFactory();
crsWgs84 = crsFactory.createFromName("EPSG:4326");
crsRect4 = crsFactory.createFromName("EPSG:2446");
crsRect5 = crsFactory.createFromName("EPSG:2447");
crsRect6 = crsFactory.createFromName("EPSG:2448");

transformFactory = CoordinateTransformFactory()
transform = transformFactory.createTransform(crsRect5,crsWgs84)

Settings.MinSimilarity=0.99
print "Start:",datetime.datetime.today()
imageList = ["0.png","1.png","2.png","3.png","4.png","5.png","6.png","7.png","8.png","9.png","COMMA.png","minus.png","dot.png"]
XYREG=Region(1603,995,211,24)
XYREG.setAutoWaitTimeout(0.1)
matches = []
for index, image in enumerate(imageList):
    try:
        mm = XYREG.findAll(image)
    except:
        pass
    else:        
        while mm.hasNext():
            matches.append([mm.next().getX(),index])
matches.sort()
xytmp =""
for m in matches:
    if m[1] == 10:
        tmp =","
    elif m[1] == 11:
        tmp ="-"
    elif m[1] == 12:
        tmp ="."    
    else:
        tmp = str(m[1])
    xytmp += tmp    
XYLIST = xytmp.split(",")
print "X座標:" + XYLIST[0]
print "Y座標:" + XYLIST[1]

MultiXYPoint = ProjCoordinate(float(XYLIST[1]) ,float(XYLIST[0]))
MultiLatLonPoint = ProjCoordinate()
transform.transform(MultiXYPoint,MultiLatLonPoint)
LatLon10 = [MultiLatLonPoint.y , MultiLatLonPoint.x]
LatLon60 = [DegToDms(LatLon10[0]),DegToDms(LatLon10[1])]
print "緯度10進:" + str(LatLon10[0])
print "経度10進:" + str(LatLon10[1])
print "緯度60進:" + LatLon60[0][0] + "度" + LatLon60[0][1] + "分" + LatLon60[0][2] + "秒"
print "経度60進:" + LatLon60[1][0] + "度" + LatLon60[1][1] + "分" + LatLon60[1][2] + "秒"

print "END:",datetime.datetime.today()

2018年7月16日 | カテゴリー : その他 | 投稿者 : HP編集者