आप महान-सर्कल दूरी का उपयोग करके एक सर्कल का वर्णन करने के लिए proj4 लाइब्रेरी का उपयोग कर सकते हैं ।
उदाहरण के लिए, यहाँ एडिनबर्ग, टोक्यो, केप टाउन और क्विटो से wgs84 / Equirectangular में 3000 किमी का दायरा। भूमध्य रेखा से निकटता के कारण केवल क्विटो अस्पष्ट रूप से 'गोल' है। मैंने 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()
आप उपयोगी QuickWKT प्लगइन का उपयोग करके QGIS में WKT आउटपुट पेस्ट कर सकते हैं ।
आप अन्य विधियों का उपयोग कर सकते हैं - जैसा कि उल्लेख किया गया है, आप अपने शुरुआती बिंदु पर केंद्रित मीटर में एक कस्टम इक्विडिस्टेंट प्रोजेक्शन पर एक सर्कल बना सकते हैं। हालांकि मुझे लगता है कि बड़ी दूरी के लिए एक त्रुटि ढलान (केवल 2000 किमी पर कुछ किमी, लेकिन अंतरमहाद्वीपीय दूरी के लिए ये त्रुटियां माउंट हो सकती हैं)
मेमोरी से, mmqgis प्लगइन किमी में बफरिंग की अनुमति देता है। मुझे यकीन नहीं है कि यह किस विधि का उपयोग करता है, हालांकि।
ध्यान दें कि आप QGIS में बहुभुज कि एंटीमेरिडियन पार आप एशिया में शुरू कर रहे हैं, तो प्रतिपादन समस्याएं हो रही हों - ogr2ogr साथ -wrapdateline विकल्प यहाँ कर सकते हैं। आप पा सकते हैं कि यह ओपनर / लीफलेट, IIRC के साथ एक समस्या से कम है, वे 180 से अधिक अक्षांशों और -180 से कम की अनुमति देते हैं।
यहाँ esri ब्लॉग पर जियोडेसिक बफरिंग के बारे में एक अच्छा राइटअप है ।