Go (Golang) में भू-स्थान और मानचित्र: उपकरणों का पूर्ण अवलोकन
Go (Golang) एक आधुनिक कंपाइल भाषा है जिसमें उत्कृष्ट प्रदर्शन और समानांतर प्रोग्रामिंग की सरलता है। सर्वर एप्लिकेशन, मॉनिटरिंग सिस्टम, लॉजिस्टिक्स प्लेटफॉर्म या भू-सूचना सेवाओं को विकसित करते समय, अक्सर भू-डेटा के साथ काम करने की आवश्यकता होती है: उपयोगकर्ता का स्थान निर्धारित करना, मार्ग बनाना, मानचित्र पर वस्तुओं को प्रदर्शित करना। इस लेख में, हम Go में भू-स्थान और मानचित्रों के साथ काम करने के लिए प्रमुख लाइब्रेरी और दृष्टिकोणों पर विचार करेंगे।
1. Go में भू-डेटा के साथ काम करने के लिए मुख्य लाइब्रेरी
Go का इकोसिस्टम भू-स्थानिक गणनाओं के लिए कई शक्तिशाली लाइब्रेरी प्रदान करता है। आइए सबसे लोकप्रिय पर विचार करें:
go-geo— ज्यामितीय प्रकारों (बिंदु, रेखाएँ, बहुभुज) के साथ काम करने के लिए लाइब्रेरी। अक्षांश/देशांतर, दूरी, क्षेत्रफल, बफर ज़ोन का समर्थन करता है।go-spatial/geom— OGC (Open Geospatial Consortium) मानक का कार्यान्वयन। ज्यामिति के साथ काम करने और स्थानिक क्वेरी करने की अनुमति देता है।paulmach/orb— भू-स्थानिक संचालन के लिए तेज़ और स्वच्छ लाइब्रेरी। इसमें बिंदु, रेखाएँ, बहुभुज, साथ ही GeoJSON और MVT (Mapbox Vector Tiles) के साथ काम करने के लिए एल्गोरिदम शामिल हैं।golang-geo— हावरसाइन सूत्र द्वारा दूरी की गणना करने, निकटतम बिंदु निर्धारित करने के लिए सरल लाइब्रेरी।
2. Go में स्थान निर्धारण (भू-स्थान)
डिवाइस के निर्देशांक (IP पता, GPS) प्राप्त करने के लिए Go में निम्नलिखित दृष्टिकोणों का उपयोग किया जाता है:
- IP द्वारा निर्धारण — लाइब्रेरी
ip2location-goयाipapi.co,ipstackजैसी सेवाएँ। बाहरी API के लिए अनुरोध का उदाहरण:
package main
import ( "encoding/json" "fmt" "net/http")
type GeoIP struct { Lat float64 `json:"latitude"` Lon float64 `json:"longitude"`}
func main() { resp, err := http.Get("http://ip-api.com/json/") if err != nil { panic(err) } defer resp.Body.Close() var geo GeoIP json.NewDecoder(resp.Body).Decode(&geo) fmt.Printf("निर्देशांक: %.4f, %.4f", geo.Lat, geo.Lon)}- मोबाइल डिवाइस से GPS निर्देशांक — आमतौर पर REST API या WebSocket के माध्यम से प्रेषित होते हैं। Go सर्वर
latऔरlonफ़ील्ड वाला JSON प्राप्त करता है। - दूरी की गणना के लिए
golang-geoलाइब्रेरी का उपयोग:
package main
import ( "fmt" "github.com/kellydunn/golang-geo")
func main() { p1 := geo.NewPoint(55.7558, 37.6173) // मॉस्को p2 := geo.NewPoint(59.9343, 30.3351) // सेंट पीटर्सबर्ग dist := p1.GreatCircleDistance(p2) // किलोमीटर में fmt.Printf("दूरी: %.2f किमी", dist)}3. मानचित्रों के साथ कार्य: OpenStreetMap और Leaflet
Go बैकएंड द्वारा उत्पन्न वेब पेज पर मानचित्र प्रदर्शित करने के लिए, अक्सर Go + Leaflet.js के संयोजन का उपयोग किया जाता है। Leaflet इंटरैक्टिव मानचित्रों के लिए एक हल्की JavaScript लाइब्रेरी है। Go निर्देशांक के साथ HTML टेम्पलेट उत्पन्न करने के लिए जिम्मेदार है।
3.1. Leaflet और Go के साथ बेसिक मानचित्र
आइए एक सरल HTTP सर्वर बनाएं जो मानचित्र वाला पेज लौटाता है:
package main
import ( "html/template" "net/http")
type Location struct { Lat float64 Lon float64}
const tpl = `<!DOCTYPE html><html><head> <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" /> <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script></head><body> <div id="map" style="height: 500px;"></div> <script> var map = L.map('map').setView([{{.Lat}},