পাইথন ব্যবহার করে প্রত্যাশিত স্থানাঙ্কগুলি ল্যাট / লম্বায় রূপান্তর করা হচ্ছে?


50

আমি ধরে নিলাম এটি একটি প্রাথমিক প্রশ্ন তবে আমি সমাধানটি খুঁজে পেতে বা সনাক্ত করতে পারে বলে মনে হচ্ছে না।

এই সাইটটি ফিরে আসে

Point:
X: -11705274.6374
Y: 4826473.6922

উদাহরণস্বরূপ আপনি যখন 000090 এর প্রথম মূল মানটি অনুসন্ধান করছেন। আমি অনুমান করি এটি একটি স্থানিক রেফারেন্স এবং আমি যা পাই তা পেয়েছি।

পাইথন ব্যবহার করে কীভাবে এটি অক্ষাংশ এবং দ্রাঘিমাংশে রূপান্তর করতে হয় তার নির্দেশাবলী বা উদাহরণগুলির সন্ধান করছি।

উত্তর:


100

পাইথনে স্থানাঙ্ক রুপান্তরিত করার সহজতম উপায় হ'ল পাইপ্রোজ , অর্থ্যাৎ পাইথন ইন্টারফেসটিকে PROJ.4 লাইব্রেরিতে রূপান্তর করা । আসলে:

from pyproj import Proj, transform

inProj = Proj(init='epsg:3857')
outProj = Proj(init='epsg:4326')
x1,y1 = -11705274.6374,4826473.6922
x2,y2 = transform(inProj,outProj,x1,y1)
print x2,y2

আয় -105.150271116 39.7278572773


4
হাঁ। পুরোপুরি পাইপরোজ।
স্যাজিলিস

এটি আমার জন্য কাজ করে
লেহেনহক্সং

36

আপনি সংযুক্ত সাইটটি ডিফল্টরূপে স্থানিক রেফারেন্স সিস্টেম EPSG 3857 (WGS84 ওয়েব মার্কেটর) ব্যবহার করে। আমি এই তথ্য এখানে পেয়েছি ।

আপনি হয় নীচের ফর্মটি মধ্যে কাঙ্ক্ষিত EPSG প্রবেশ করে অন্য একটি স্থানিক রেফারেন্স সিস্টেম নির্দিষ্ট Spatial Referenceকরতে পারেন বা আপনি পাইথনের সাথে ফিরে আসা স্থানাঙ্কগুলিকে রূপান্তর করতে পারেন।

উদাহরণস্বরূপ, আপনি GDAL পাইথন বাইন্ডিংগুলি ব্যবহার করতে পারেন এই বিন্দুটিকে অভিক্ষিপ্ত স্থানাঙ্ক সিস্টেম (EPSG 3857) থেকে একটি ভৌগলিক স্থানাঙ্ক সিস্টেমে (EPSG 4326) রূপান্তর করতে।

import ogr, osr

pointX = -11705274.6374 
pointY = 4826473.6922

# Spatial Reference System
inputEPSG = 3857
outputEPSG = 4326

# create a geometry from coordinates
point = ogr.Geometry(ogr.wkbPoint)
point.AddPoint(pointX, pointY)

# create coordinate transformation
inSpatialRef = osr.SpatialReference()
inSpatialRef.ImportFromEPSG(inputEPSG)

outSpatialRef = osr.SpatialReference()
outSpatialRef.ImportFromEPSG(outputEPSG)

coordTransform = osr.CoordinateTransformation(inSpatialRef, outSpatialRef)

# transform point
point.Transform(coordTransform)

# print point in EPSG 4326
print point.GetX(), point.GetY()

এটি আপনার পয়েন্টের স্থানাঙ্কগুলির জন্য ফিরে আসে -105.150271116 39.7278572773


6

আউটপুট কোনও স্থানিক / স্থানাঙ্কিক রেফারেন্স সিস্টেম নয় , এটি সমন্বয়ের একজোড়া। স্থানাঙ্কগুলি পুনরায় প্রজেক্ট করতে আপনাকে স্থানিক উল্লেখটি কী তা জানতে হবে।

তবে, এই ক্ষেত্রে এটি প্রয়োজন হয় না। পরিষেবাটির জন্য কেবলমাত্র একটি উপযুক্ত আউটপুট স্থানিক রেফারেন্স দিন এবং এটি লন / ল্যাটে স্থানাঙ্কগুলি ফিরিয়ে দেবে।

ডাব্লুজিএস -৪৪ ভৌগলিক স্থানিক রেফারেন্স সিস্টেম ( ইপিএসজি 4326 ) ব্যবহার করে লোন / ল্যাট ফর্ম্যাটে আউটপুট স্থানাঙ্ক সহ পৃষ্ঠাটি এখানে রয়েছে ।


6

আফালকিয়ানোতে সঠিক উত্তর রয়েছে তবে তারা পাইপোজের বৈকল্পিক ব্যবহার অন্তর্ভুক্ত করতে চেয়েছিলেন।

এটা তোলে করেন প্রয়োজন আপনি proj4 স্ট্রিং জানি এবং একটি অতি ক্ষুদ্র অংশ দ্রুততর।

import pyproj
p = pyproj.Proj("+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
lon, lat = p(x, y, inverse=True)
print lat, lon

2
আপনার প্রজ 4 স্ট্রিং দরকার নেই, দ্বিতীয় লাইনের বিকল্প করুন p = pyproj.Proj(init='epsg:3857')এবং ফলাফলটি একই।
বর্ণমালা

1
ফলাফলটি একই তবে সর্বশেষে আমি যাচাই করেছিলাম এটি খুব সামান্য দ্রুত ছিল।
মার্সেল উইলসন

3

মার্সেল উইলসনের প্রস্তাবিত কোডটি ব্যবহার করে দেখুন এবং এটি আরও দ্রুত:

from pyproj import Proj, transform
import time
import pyproj


# Test 1 - 0.0006158 s
start=time.time()
inProj = Proj(init='epsg:3857')
outProj = Proj(init='epsg:4326')
x1,y1 = -11705274.6374,4826473.6922
x2,y2 = transform(inProj,outProj,x1,y1)
end=time.time()
print(y2,x2)
print('%.7f' % (end-start))

# Test 2 - 0.0000517 s --- factor 11,9
start=time.time()
x,y = -11705274.6374,4826473.6922
p = pyproj.Proj("+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
lon, lat = p(x, y, inverse=True)
end=time.time()
print(lat, lon)
print('%.7f' % (end-start))
-----------------

39.72785727727918 -105.15027111593008
0.0006158
39.72785727727918 -105.15027111593008
0.0000517

1

কিউজিআইএস-এর মধ্যে এটি করার উপায়গুলি খুঁজতে গিয়ে আমি এই পোস্টটি পেয়েছি। এখানে বর্ণিত হিসাবে , ব্যবহৃত পদ্ধতিটি দেখতে এরকম দেখাচ্ছে:

def convertProjection(self,x,y,from_crs,to_crs):
    crsSrc = QgsCoordinateReferenceSystem(from_crs)
    crsDest = QgsCoordinateReferenceSystem(to_crs)
    xform = QgsCoordinateTransform(crsSrc, crsDest)
    pt = xform.transform(QgsPoint(x,y))
    return pt.x, pt.y

# Remove the "EPSG:" part
from_crs = 3857
to_crs = 4326
x = -11705274.6374    
y = 4826473.6922
lon, lat = self.convertProjection(x,y,from_crs, to_crs)

2
দ্রষ্টব্য, কিউজিআইএস 3 এ একটি ব্রেকিং এপিআই পরিবর্তন রয়েছে, তাই যদি v3.xআপনি ব্যবহার করেন তবে আপনাকে ব্যবহার করতে হবেxform = QgsCoordinateTransform(crsSrc, crsDest, QgsProject.instance())
জনি

0

দয়া করে মনে রাখবেন transformফাংশন pyprojএছাড়াও গ্রহণ arrays, যা বেশ দরকারী যখন এটি dataframes আসে

import pandas as pd
from pyproj import Proj, transform

df = pd.DataFrame({'x': [-11705274.6374]*100, 
                   'y': [4826473.6922]*100})
inProj, outProj = Proj(init='epsg:3857'), Proj(init='epsg:4326')
df['x2'], df['y2'] = transform(inProj, outProj, df['x'].tolist(), df['y'].tolist())

-1
import cv2
import numpy as np
def onMouse(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDOWN:
       # draw circle here (etc...)
       print('x = %f, y = %f'%((x*2/100),(y*2/100)))
a=float(input("enter length of original dimension in cm"))
b=float(input("enter width of original dimension in cm"))
print("origional image coordinates")
im=cv2.imread('mask1.jpg',0)
re_im=cv2.resize(im,(round(a*100/2),round(b*100/2)))
cv2.imshow('image',re_im)
cv2.setMouseCallback('image', onMouse)
cv2.waitKey(0)
cv2.destroyAllWindows()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.