গ্রেট-সার্কেল দূরত্ব ব্যবহার করে আপনি একটি বৃত্ত বর্ণনা করতে proj4 লাইব্রেরি ব্যবহার করতে পারেন ।
উদাহরণস্বরূপ, এডিনবার্গ, টোকিও, কেপটাউন এবং কুইটো থেকে wgs84 / ইকুয়েটারটাইঙ্গুলারে 3000 কিলোমিটার ব্যাসার্ধ। নিরক্ষীয় অঞ্চলের সান্নিধ্যের কারণে কেবল কুইটো অস্পষ্টভাবে 'বৃত্তাকার' is আমি ৩ 36 ডিগ্রি (প্রায় NE) এর একটি একক ঘন স্পিক লাইনে যুক্ত করেছি
যদি আমরা এডিনবার্গকে কেন্দ্র করে একটি আজিমুথাল ইক্যুইডিস্টিটিভ প্রজেক্টে পরিবর্তন করি, আপনি এডিনবার্গের চারদিকে ব্যাসার্ধটিকে একটি বৃত্তে পরিণত করতে দেখবেন ...
মার্কেটরে (আপনার ওয়েব অ্যাপের মতো), আপনি নিরক্ষীয় অঞ্চল থেকে দূরে সরে যাওয়ার সাথে সাথে আপনি আরও বিকৃতি দেখেন, তবে বাফারগুলি আরও উপবৃত্তাকার হয়।
নিম্নলিখিত পাইথন কোড আছে যে (প্রয়োজন pyproj এবং সুষম )
import pyproj
from shapely.geometry import Polygon, MultiPoint, LineString
import math
def geodesicpointbuffer(longitude, latitude,
segments, distance_m,
geom_type=MultiPoint):
"""
Creates a buffer in meters around a point given as long, lat in WGS84
Uses the geodesic, so should be more accurate over larger distances
:param longitude: center point longitude
:param latitude: center point latitude
:param segments: segments to approximate (more = smoother)
:param distance_m: distance in meters
:param geom_type: shapely type (e.g. Multipoint, Linestring, Polygon)
:return: tuple (proj4 string, WKT of buffer geometry)
"""
geodesic = pyproj.Geod(ellps='WGS84')
coords = []
for i in range(0, segments):
angle = (360.0 / segments) * float(i)
x1, y1, z1 = geodesic.fwd(lons=longitude,
lats=latitude,
az=angle,
dist=distance_m,
radians=False)
coords.append((x1, y1))
# makes a great circle for one spoke.
if i==200:
example = geodesic.npts(longitude,latitude,x1,y1,1000)
coords2 = []
for xx,yy in example:
coords2.append((xx,yy))
coords2.append((x1,y1)) # make sure we include endpoint ;-)
flight = LineString(coords2)
print(flight.wkt)
ring = geom_type(coords)
return "+init=EPSG:4326", ring.wkt
def main():
# example : Cape Town. 3000km buffer.
spec, wkt = geodesicpointbuffer(18.4637082653, -33.8496404007, 2000, 3000000.0, Polygon)
print(spec)
print(wkt)
if __name__ == "__main__":
main()
আপনি দরকারী কুইকডব্লিউটিটি প্লাগইন ব্যবহার করে ডাব্লুকেটি আউটপুট কিউজিআইএস এ পেস্ট করতে পারেন ।
আপনি অন্যান্য পদ্ধতিগুলি ব্যবহার করতে পারেন - যেমন কনিপাইলন উল্লিখিত হয়েছে, আপনি আপনার প্রারম্ভিক বিন্দুটিকে কেন্দ্র করে মিটারগুলিতে একটি কাস্টম সামঞ্জস্যপূর্ণ প্রক্ষেপণের উপর একটি বৃত্ত তৈরি করতে পারেন। আমি দেখতে পেলাম যে বড় দূরত্বের জন্য একটি ত্রুটিটি কমছে (2000 কিলোমিটারের কয়েক কিলোমিটারের মধ্যে, তবে আন্তঃমহাদেশীয় দূরত্বগুলির জন্য এই ত্রুটিগুলি বাড়তে পারে)
মেমরি থেকে, মিমি কিগ্রিজ প্লাগইনটি কি.মি. যদিও এটি কোন পদ্ধতিটি ব্যবহার করে তা আমি নিশ্চিত নই।
নোট করুন যে আপনার কিউআইজিআইএসে বহুভুজ রেন্ডারিংয়ের সমস্যা হতে পারে যা আপনি এশিয়া থেকে শুরু করে যদি অ্যান্টিমিডারডিয়ান অতিক্রম করে থাকেন - -রেপডেটলাইন বিকল্পের সাথে ogr2ogr এখানে সহায়তা করতে পারে। আপনি ওপেনলেয়ার / লিফলেট নিয়ে সমস্যাটি কম দেখতে পাচ্ছেন, আইআইআরসি তারা দ্রাঘিমাংশকে 180 এর চেয়ে বেশি এবং -180 এর চেয়ে কম মঞ্জুরি দেয়।
এসিরি ব্লগে জিওডেসিক বাফারিং সম্পর্কে একটি ভাল লেখার ব্যবস্থা রয়েছে ।