कैसे उड़ने पर जियोकोड 300,000 पते?


18

मेरे पास एक डेटाबेस है जिसमें 300,000 पता है, जो मानचित्र पर दिखाए जाने हैं। मुझे पता है कि अगर मैं सभी पते को जियो-कोड करता हूं तो यह मेरे लिए बहुत महंगा होगा। इसलिए मैं सोच रहा था कि क्या यह मक्खी / रिअलटाइम पर पते को जियो-कोड करना संभव है, जब कोई उपयोगकर्ता एक पते (एक संपत्ति का पता) का चयन करेगा, यह डेटाबेस के माध्यम से खोज करेगा और फिर पते को भू-कोड करेगा और फिर उसके साथ मैप करेगा अन्य विशेषताएं।

यदि आप एक कोड, अवधारणा, या कुछ भी साझा कर सकते हैं तो यह वास्तव में अच्छा होगा। वैसे मेरा बैकेंड जूमला द्वारा समर्थित mysql पर है।


मैं आमतौर पर बड़ी संख्या में पतों की जियोडोड करने के लिए आर्कगिस जियोकोडिंग क्षमता का उपयोग करता हूं। इसके अलावा, मैं वास्तव में यहां बताई गई प्रक्रियाओं के बारे में दिलचस्पी रखता हूं, विशेष रूप से, Google का उपयोग करते हुए पते को जियोकोड करने के लिए अजगर स्क्रिप्ट का परीक्षण करना पसंद करता हूं, फिर उनकी तुलना मैंने आर्कगिस से प्राप्त की है। दुर्भाग्य से, यह मुझे लगता है कि मैं सभी संबंधित फाइलों और लिपियों को खोजने में सक्षम नहीं हूं जो अलग-अलग जगहों पर हैं। यह बहुत सराहा जाएगा अगर कोई मुझे एक-एक ज़िप फ़ाइल या चरणबद्ध निर्देश द्वारा कोई भी स्क्रिप्ट भेजें। मैंने इसका उपयोग करने की कोशिश की है और आपको कुछ प्रतिक्रिया मिली है, लेकिन मैं सफल नहीं था
हौश

जवाबों:


15

मेहुल, मैं स्मार्टरीस्ट्रीट्स नामक कंपनी के साथ एड्रेस वेरिफिकेशन इंडस्ट्री में काम करता था। वहाँ बहुत से जियोकोडिंग सेवाएं हैं, लेकिन केवल कुछ ही आपको आवश्यक वॉल्यूम के साथ बैच प्रसंस्करण का समर्थन करेंगे। (Google और अन्य अपने API या भंडारण / कैशिंग परिणामों के थोक उपयोग की अनुमति नहीं देते हैं।)

यदि आप अपने MySQL डेटाबेस में जाते हैं और अपनी तालिका का निर्यात करते हैं जिसमें पते हैं, तो इसे उदाहरण के लिए CSV फ़ाइल के रूप में सहेजें। फिर आप इसे स्मार्टलिस्ट वेब टूल या कमांड लाइन टूल का उपयोग करके प्रोसेस कर सकते हैं । जैसा मैंने कहा, वहाँ कई सेवाएँ हैं, लेकिन आप कुछ चाहते हैं, मुझे लगता है, कि पते के अस्तित्व की पुष्टि करता है (इसलिए जियोकोडिंग का कारण) - यदि पता गलत या अधूरा है, तो जियोकोडिंग परिणाम हैं । कुछ ही सेवाएँ ऐसा करती हैं।

LiveAddress एक सेवा है जो USPS द्वारा CASS-Certified है। वहाँ कुछ कर रहे हैं तो अपने शोध करते हैं, लेकिन आप चाहते हैं "पर-मक्खी" / त्वरित और सस्ती तो फिर से मैं LiveAddress सलाह देते हैं। यह न केवल पते को सत्यापित करेगा, बल्कि तब आपको आवश्यकता होगी, जो लेट / लोन की सूचना और जियोकोडिंग परिणामों की शुद्धता की आपूर्ति करता है। यह सभी वेब-आधारित है और कुछ ही समय में दसियों लाख रिकॉर्ड की प्रक्रिया करेगा ( इस प्रश्न को संदर्भ के रूप में देखें )।

अगर आपको उपयोगकर्ताओं के साथ बातचीत करने के लिए जियोकोड पते की आवश्यकता है, तो LiveAddress का एक एपीआई संस्करण भी है, जो किसी भी चीज़ के बारे में प्लग कर सकता है और यह बैच प्रसंस्करण का समर्थन भी करता है, लेकिन एक बार नहीं, बल्कि सदस्यता के रूप में भुगतान किया जाता है। भुगतान।


स्मार्टस्ट्रीट से परिचित नहीं, होनहार लग रहा है, सिर ऊपर करने के लिए धन्यवाद।
डेरेक स्विंगले

LiveAddress API लगभग 5-10 मिनट में 300,000 कर देगा। लिस्टएड्रेस फॉर लिस्ट्स सेवा (प्रसंस्करण के लिए एक सूची अपलोड करें) में 15-20 मिनट लगते हैं। दोनों बहुत तेज। सूची सेवा के लिए आपको कोई कोड लिखने की आवश्यकता नहीं होगी।
जेफरी

2
अमेरिका के लिए केवल जियोडेक्स स्मार्टकीस्ट्रीट?
Mapperz

मेरे पास डेटा है जो सिंगापुर के लिए है क्या यह काम करेगा? अगर कोई निर्देश नहीं दे सकता तो आप मुझे दे सकते हैं ????
user1089553

Google बिंग और अन्य प्रदाताओं के साथ कई कॉपीराइट नियम हैं। आप डेटा निर्यात नहीं करते हैं!

11

यदि आप पाइथन को पसंद करते हैं, तो आप GDAL पायथन बाइंडिंग या फियोना के साथ मिलकर जियोपी एपीआई का उपयोग कर सकते हैं , और पतों को एक पॉइंट शेपफाइल में परिवर्तित करने के लिए इस तरह की एक बहुत ही मूल स्क्रिप्ट बना सकते हैं।

यह 'address_to_geocode' नामक एक फाइल को जियोलोकेट करेगा, जो my_output फ़ोल्डर में 'my_output.shp' नाम से एक आउटपुट आकृति बनाता है:

import os
from geopy import geocoders
from osgeo import ogr, osr

def geocode(address):
    g = geocoders.GoogleV3()
    place, (lat, lng) = g.geocode(address)
    print '%s: %.5f, %.5f' % (place, lat, lng)
    return place, lat, lng

def parse_file(filepath, output_shape):
    # create the shapefile
    drv = ogr.GetDriverByName("ESRI Shapefile")
    if os.path.exists(output_shape):
        drv.DeleteDataSource(output_shape)
    ds = drv.CreateDataSource(output_shape)
    # spatial reference
    sr = osr.SpatialReference()
    sr.ImportFromProj4('+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')
    lyr = ds.CreateLayer(output_shape, sr, ogr.wkbPoint)
    # fields
    featDefn = lyr.GetLayerDefn()
    fld_id = ogr.FieldDefn('id', ogr.OFTInteger)
    fld_address = ogr.FieldDefn('ADDRESS', ogr.OFTString)
    fld_address.SetWidth(255)
    lyr.CreateField(fld_id)
    lyr.CreateField(fld_address)
    print 'Shapefile %s created...' % ds.name
    # read text addresses file
    i = 0
    f = open(filepath, 'r')
    for address in f:
        try:
            print 'Geocoding %s' % address
            place, lat, lng = geocode(address)
            point = ogr.Geometry(ogr.wkbPoint)
            point.SetPoint(0, lng, lat)
            feat = ogr.Feature(lyr.GetLayerDefn())
            feat.SetGeometry(point)
            feat.SetField('id', i)
            feat.SetField('ADDRESS', address)
            lyr.CreateFeature(feat)
            feat.Destroy()
            i = i + 1
        except:
            print 'Error, skipping address...'

parse_file('addresses_to_geocode', 'my_output')

फ़ाइल को एक एकल पते के लिए एक पंक्ति माना जाता है, उदाहरण के लिए:

Via Benedetto Croce 112, Rome, Italy
Via Aristide Leonori 46, Rome, Italy
Viale Marconi 197, Rome, Italy

यहां मैं Google API का उपयोग कर रहा हूं, लेकिन GeoPy के साथ याहू, जियोनेम, या मैपपॉइंट जैसे अंतर एपीआई में स्विच करने के लिए बहुत ही बुनियादी है


यह भी खूब रही! धन्यवाद दोस्त! वैसे भी, वर्तमान (01/2016) में, 'geocoders.Google ()' 'geocoders.GoogleV3 ()' के लिए के रूप में बदला जाना चाहिए geopy.readthedocs.org/en/1.11.0
umbe1987

1

एक अन्य विकल्प आपकी समस्या को हल करने के लिए अपने डेटासेट को फ्यूजन टेबल पर आयात करना होगा और पता फ़ील्ड को स्थान के रूप में सेट करना होगा। फिर यह स्वचालित रूप से अंक जियोडोड करेगा। एक बार पूरा होने के बाद, आप KML के रूप में डेटा निर्यात कर सकते हैं।

या..सामान्य रूप से, आप याहू जियोकोडर का उपयोग करने के लिए एक php स्क्रिप्ट लिख सकते हैं जिसकी सीमा 50 000 रिकॉर्ड है, इसलिए जितनी जल्दी या बाद में आपके सभी बिंदु आपके डेटाबेस में जियोकोडेड होंगे।

मुझे उम्मीद है कि इससे मदद मिली!


धन्यवाद तमस, लेकिन मैं kml प्राप्त नहीं करना चाहूंगा और फिर वहां से जानकारी प्राप्त करूंगा और फिर m db में जाऊंगा। मैं याहू जियोकोडिंग का विचार करना पसंद करता हूं, लेकिन मेरे पास इसकी सटीकता के बारे में सुनिश्चित नहीं है, क्योंकि मैंने मैपिंग के लिए कभी भी याहू का उपयोग नहीं किया है। कृपया मुझे बताएं कि क्या आपके पास कोई स्क्रिप्ट लिखी गई है या कोई चीज़ है। यह एक बड़ी मदद है
user1089553

ध्यान रखें कि याहू (या Google, उस मामले के लिए) का उपयोग करके स्वचालित प्रश्नों के साथ या बिना मानचित्र दिखाए जियोकोड टीओएस का उल्लंघन करेगा ...
मैट

जहाँ तक मुझे पता है, यह नहीं है यदि आप आउटपुट को मैप पर प्रस्तुत करते हैं। अगर मैं ग़लत हूं तो मेरी गलती सुझाएं!
EZMapdesign

@ तमस की तरह। हालाँकि इसे देखें: Developers.google.com/maps/terms#section_10_1_3
मैट


0

हो सकता है कि आपके सवाल का सबसे अच्छा जवाब न हो लेकिन आप बैचजीओ आज़मा सकते हैं। नि: शुल्क संस्करण आपको बहुत नुकसान पहुंचाएगा, लेकिन फिर भी मेरे काम के लिए काफी अच्छा था। हालांकि, हमने प्रो संस्करण खरीदा है।

KML फ़ाइल से निर्देशांक प्राप्त करने की ट्रिक इसे बाद में ArcGIS पर आयात करना है।


धन्यवाद, क्या आप मुझे बता सकते हैं कि मैं एक बैचगोई कैसे करता हूं, क्या आप मुफ्त संस्करण के नाम भी जानते होंगे (मैं Google मानचित्र एपीआई v3 के लिए कोशिश कर रहा था)। इसका मतलब यह भी है कि मुझे अपने डेटाबेस में लाट / लॉन्ग वैल्यू को स्टोर करना होगा ताकि इसे मैप कर सकें। यह वही है जो मैं पहली जगह में करना चाहता था।
user1089553

बैचजीओ के साथ, आपको अपने डेटाबेस में केएमएल को आयात करना होगा फिर निर्देशांक निकालें, मुझे पता है कि निर्देशांक प्रदान करने के लिए Google मना करने के अलावा कोई अन्य तरीका नहीं है। याहू के बारे में, तुर्की के साथ मेरा अनुभव वास्तव में उज्ज्वल नहीं है। अधिकांश विकासशील देशों को याहू के दायरे से बाहर रखा गया है। Anil।
ऐल एलिक

0

मैं सफलतापूर्वक जियोफाई का उपयोग कर रहा हूं जो Google जियोकोडिंग वेब सेवा का उपयोग करता है। यह 24 घंटे प्रति 2k अंक तक पूरी तरह से काम करता है।


0

Matej, Thats क्योंकि Google API प्रति दिन 2.5k तक खींचने की अनुमति देता है।
जियो समाधान के बारे में, बैच अभी तक समर्थित नहीं पाया गया है, क्योंकि जियो अजगर कोड की मेरी समीक्षा से हर बार जब वह नए कॉर्डिनेट का अनुरोध करता है तो कनेक्शन खोलना प्रतीत होता है, 300k शायद हमेशा के लिए अटक जाएगा (शायद त्रुटि 400 के साथ)।
पॉलीगन्स के साथ खेलें, चाल चलनी चाहिए, लेकिन यह निर्भर करता है कि आपका 'प्ले ग्राउंड' क्षेत्र क्या है, यदि यह 1 देश या n देश है।
1 देश के लिए बहुभुज को बहुत अच्छा काम करना चाहिए।
एन देशों के लिए समाधान काम नहीं करेगा क्योंकि संग्रह में आपको किसी अन्य देश को जोड़ने में अधिक समय लगेगा। सबसे अच्छा aproch यह आलसी लोड है।
=> बहुभुज विचार के साथ शुरू करें, दूसरे देश में हर चीज, डेटा रखने के लिए एक बड़ा डेटाबेस टेबल बनाएं, आखिरकार आप उस डेटा को पकड़ लेंगे जो मुझे चाहिए।


0

अगर आप इसे PHP - MySQL के साथ करना चाहते हैं तो यहाँ एक समाधान है जो मेरे लिए काम कर रहा है:

<script type="text/javascript" charset="utf-8">

    var customIcons = {
      restaurant: {
        icon: 'http://labs.google.com/ridefinder/images/mm_20_blue.png',
        shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
      },
      bar: {
        icon: 'http://labs.google.com/ridefinder/images/mm_20_red.png',
        shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
      },
      club:
      {
        icon: 'http://labs.google.com/ridefinder/images/mm_20_yellow.png',
        shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png' 
      },
      church:
      {
        icon: 'http://labs.google.com/ridefinder/images/mm_20_green.png',
        shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png' 
      }
    };

      function initialize() 
      {
        var mapOptions = {
          center: new google.maps.LatLng(37.976178, 23.735881),
          zoom: 7,
          mapTypeId: google.maps.MapTypeId.roadmap
        };
        var map = new google.maps.Map(document.getElementById("map-canvas"),
            mapOptions);
        <?php header("content-type: text/html;charset=utf-8");
        $getpoints = "SELECT lat, lng, name, address, type FROM markers";
        $getpoints .= $filter;

        if(!$result = $con->query($getpoints)){
        die('There was an error running the query 
        [' . $con->error . ']');
        }

        else 
        {
            while ($row = $result->fetch_assoc()) 
            {
                $thematic = "'$row[type]'";
                $name = "'$row[name]'";
                $map_address = "$row[address]";

                $url = "http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=".urlencode($map_address);
                $lat_long = get_object_vars(json_decode(file_get_contents($url)));

                // pick out what we need (lat,lng)
                $lat_long = $lat_long['results'][0]->geometry->location->lat . "," . $lat_long['results'][0]->geometry->location->lng;

                echo "var myLatlng1 = new google.maps.LatLng($lat_long); 
                var icon = customIcons[$thematic] || {};
                var marker1 = new google.maps.Marker({ 
                position: myLatlng1, 
                map: map,
                icon: icon.icon,
                title: '$map_address'
                });";           
            }
        }       

        ?>    
      }

      google.maps.event.addDomListener(window, 'load', initialize);
    </script>

0

इस जियोकोडिंग एपी की कोशिश करें । यह छोटे उपयोग के लिए स्वतंत्र है, लेकिन यदि आप अधिक चाहते हैं तो वे आपको भुगतान करते हैं। हालांकि यह सस्ता है और आप इतनी आसानी से प्रक्रिया कर सकते हैं, मैं उनके माध्यम से महीने में लाखों प्रक्रिया करता हूं।


0

आप अपने डेटा को एक पाठ फ़ाइल (प्रति पंक्ति एक रिकॉर्ड) के रूप में सहेज सकते हैं फिर बैच जियोकोड को इस सेवा का उपयोग करके: http://geocode.xyz/batch (अधिकांश यूरोपीय देशों के लिए काम करता है)

या, आप REST / JSON API तक पहुंचने के लिए अपना कोड लिख सकते हैं: http://geocode.xyz/api (यह असीमित लुकअप के लिए मुफ़्त है)


0

मैपिंग टूल का उपयोग करें (मैप पॉइंटिंग। बैच जियोकोडिंग टूल ( http://www.mappointing.com/ )) इस टूल में आप Google मैप फ्री एपीआई कुंजी का उपयोग करके डेटा को प्रोसेस कर सकते हैं। और यह उपकरण दूरी की गणना और स्थान खोज उपकरण भी प्रदान कर रहा है।


यह वही एपीआई सीमा ओपी का उल्लेख क्यों नहीं करेगा?
22x में lynxlynxlynx
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.