সুদৃশ্য দৈর্ঘ্যের গুণকের একক কী?


11

আমি সুবিন্যস্তভাবে একটি পললাইন দৈর্ঘ্যের খুব সাধারণ গণনা করছি:

from shapely.geometry import LineString
... 
xy_list = [map(float,e) for e in xy_intm]
line = LineString(xy_list)
s = '%s,%s,%s' % (fr,to,line.length)

আমার স্থানাঙ্কগুলি ডাব্লুজিএস 84 এ রয়েছে। আকারের দৈর্ঘ্যের গুণাবলী সম্পর্কে আমি কোনও তথ্য খুঁজে পাচ্ছি বলে মনে হচ্ছে না। দৈর্ঘ্যের গুণকের একক কী? কিমি বা মিটারে রূপান্তর করার কোনও সহজ উপায় আছে?


আপনি দুটি নমুনা আকারের জন্য স্থানাঙ্ক এবং দৈর্ঘ্য সরবরাহ করতে পারেন?
ভিন্স

উত্তর:


13

আলফাচিয়ানো যেমন আকারে বলেছে, দূরত্বটি হ'ল ইউক্লিডিয়ান দূরত্ব বা লিনিয়ার দূরত্বটি বিমানের দুটি পয়েন্টের মধ্যে এবং এক গোলকের দুটি পয়েন্টের মধ্যে গ্রেট-সার্কেলের দূরত্ব নয়

from shapely.geometry import Point
import math


point1 = Point(50.67,4.62)
point2 = Point(51.67, 4.64)

# Euclidean Distance
def Euclidean_distance(point1,point2):
     return math.sqrt((point2.x()-point1.x())**2 + (point2.y()-point1.y())**2)

print Euclidean_distance(point1,point2)
1.00019998 # distance in degrees (coordinates of the points in degrees)

# with Shapely
print point1.distance(point2)
1.0001999800039989 #distance in degrees (coordinates of the points in degrees)

দুর্দান্ত বৃত্তের দূরত্বের জন্য আপনার অ্যালগরিদমগুলি কোসাইনের আইন বা হাভারসাইন সূত্র হিসাবে ব্যবহার করতে হবে ( দুটি অক্ষাংশ-দ্রাঘিমাংশের পয়েন্টের মধ্যে দূরত্ব গণনা করার সময় কোচাইনগুলির চেয়ে কোসাইনগুলির আইন কেন বেশি পছন্দনীয়? দেখুন ) বা মডিউল পাইপ্রোজ ব্যবহার করতে হবে জিওডেটিক গণনা সম্পাদন করে।

# law of cosines
distance = math.acos(math.sin(math.radians(point1.y))*math.sin(math.radians(point2.y))+math.cos(math.radians(point1.y))*math.cos(math.radians(point2.y))*math.cos(math.radians(point2.x)-math.radians(point1.x)))*6371
print "{0:8.4f}".format(distance)
110.8544 # in km
# Haversine formula
dLat = math.radians(point2.y) - math.radians(point1.y)
dLon = math.radians(point2.x) - math.radians(point1.x)
a = math.sin(dLat/2) * math.sin(dLat/2) + math.cos(math.radians(point1.y)) * math.cos(math.radians(point2.y)) * math.sin(dLon/2) * math.sin(dLon/2)
distance = 6371 * 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
print "{0:8.4f}".format(distance)distance
110.8544 #in km

# with pyproj
import pyproj
geod = pyproj.Geod(ellps='WGS84')
angle1,angle2,distance = geod.inv(point1.x, point1.y, point2.x, point2.y)
print "{0:8.4f}".format(distance/1000)
110.9807 #in km

দ্রাঘিমাংশ অক্ষাংশ দূরত্ব ক্যালকুলেটরে আপনি ফলাফলটি পরীক্ষা করতে পারেন

এখানে চিত্র বর্ণনা লিখুন


দুর্দান্ত উত্তর, জিন! আপনার খুব বিস্তারিত ব্যাখ্যার জন্য অনেক ধন্যবাদ।
আন্তোনিও ফ্যালকিয়ানো

1
সত্যিই, দুর্দান্ত উত্তর। যদি আমার ভুল না হয় তবে এখানে আর একটি অজগর প্যাকেজ geopyরয়েছে যা একটি দুর্দান্ত বৃত্তের দূরত্ব এবং ভিনসেন্টি দূরত্ব গণনার প্রয়োগ করেছে।
লার্সভেগাস

এখানে 'দিয়ে geodesic দূরত্ব হিসাব সম্পর্কে কিছু বিবরণ গুলি geopy
আন্তোনিও ফ্যালকিয়ানো

13

সমন্বয় ব্যবস্থা

[...] সুস্পষ্টভাবে সমন্বিত সিস্টেমের রূপান্তরকে সমর্থন করে না। দুই বা ততোধিক বৈশিষ্ট্যের সমস্ত ক্রিয়াকলাপ ধরে নিয়েছে যে বৈশিষ্ট্যগুলি একই কার্তেসিয়ান বিমানে উপস্থিত রয়েছে।

সূত্র: http://toblerity.org/ shapely/ manual.html#coordinate-s সিস্টেমে

হচ্ছে shapelyএসআরএস প্রসঙ্গে সম্পূর্ণরূপে অজ্ঞেয়বাদী, এটা বেশ সুস্পষ্ট যে দৈর্ঘ্য অ্যাট্রিবিউট আপনার linestring স্থানাঙ্ক, অর্থাত্ ডিগ্রী একই ইউনিট প্রকাশ করা হয় না। আসলে:

>>> from shapely.geometry import LineString
>>> line = LineString([(0, 0), (1, 1)])
>>> line.length
1.4142135623730951

পরিবর্তে, যদি আপনি মিটারে দৈর্ঘ্য প্রকাশ করতে চান, আপনাকে পিপ্রোজ (বা আরও ভাল, জিওডেসিক দূরত্ব গণনা সম্পাদন করতে , জিনের উত্তর দেখুন) ব্যবহার করে আপনার জ্যামিতিগুলি ডাব্লুজিএস 84 থেকে একটি অনুমিত এসআরএসে রূপান্তর করতে হবে । বিস্তারিতভাবে, সংস্করণ 1.2.18 ( shapely.__version__) থেকে, জ্যামিতি ট্রান্সফর্ম ফাংশনগুলিকেshapely সমর্থন করে ( http://toblerity.org/shapely/shapely.html#module- shapely.ops ) যা আমরা এর সাথে মিলিয়ে ব্যবহার করতে পারি । এখানে একটি দ্রুত উদাহরণ:pyproj

from shapely.geometry import LineString
from shapely.ops import transform
from functools import partial
import pyproj

line1 = LineString([(15.799406, 40.636069), (15.810173,40.640246)])
print(str(line1.length) + " degrees")
# 0.0115488362184 degrees

# Geometry transform function based on pyproj.transform
project = partial(
    pyproj.transform,
    pyproj.Proj('EPSG:4326'),
    pyproj.Proj('EPSG:32633'))

line2 = transform(project, line1)
print(str(line2.length) + " meters")
# 1021.77585965 meters
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.