কীভাবে উড়ে 30000 ঠিকানার জিওকোড করবেন?


18

আমার কাছে একটি ডাটাবেস রয়েছে যার 300,000 ঠিকানা রয়েছে, যা মানচিত্রে প্রদর্শিত হবে। আমি জানি আমি যদি সমস্ত ঠিকানা জিও কোড করি তবে তা আমার পক্ষে খুব ব্যয়বহুল। তাই আমি ভাবছিলাম যে ফ্লাই / রিয়েলটাইমে ঠিকানার ঠিকানাটি জিও-কোড করা সম্ভব, যখন কোনও ব্যবহারকারী কোনও ঠিকানা (কোনও সম্পত্তির ঠিকানা) নির্বাচন করবেন যখন এটি ডাটাবেসের মাধ্যমে অনুসন্ধান করবে এবং তারপরে ঠিকানাটি জিও-কোড করবে এবং তারপরে এটি ম্যাপ করবে if অন্যান্য বৈশিষ্ট্য।

আপনি যদি একটি কোড, ধারণা বা যে কোনও কিছু ভাগ করে নিতে পারতেন তবে এটি খুব সুন্দর হবে। যাইহোক আমার ব্যাকএন্ডটি জুমলা দ্বারা সমর্থিত মাইএসকিএল-এ রয়েছে।


আমি সাধারণত বিপুল সংখ্যক ঠিকানা জিওকোড করার জন্য আর্কজিআইএস জিওকোডিং ক্ষমতাটি ব্যবহার করি। এছাড়াও, আমি এখানে বর্ণিত প্রক্রিয়াগুলি সম্পর্কে সত্যই আগ্রহী, বিশেষত, গুগল ব্যবহার করে ঠিকানাগুলি জিওকোড করার জন্য পাইথন স্ক্রিপ্টটি পরীক্ষা করতে পছন্দ করি, তারপরে আর্কজিআইএস থেকে আমি কী পেয়েছি তার সাথে তাদের তুলনা করুন। দুর্ভাগ্যক্রমে, আমার কাছে মনে হয়েছে যে আমি বিভিন্ন জায়গায় থাকা সম্পর্কিত ফাইল এবং স্ক্রিপ্টগুলির সন্ধান করতে সক্ষম নই। যদি কেউ দয়া করে আমাকে একটি জিপ ফাইলের সমস্ত স্ক্রিপ্ট বা কোনও ধাপে ধাপে নির্দেশনা পাঠান তবে এটি প্রশংসা হবে। আমি এটি ব্যবহার করার চেষ্টা করেছি এবং আপনাকে কিছু প্রতিক্রিয়া জানাতে চেষ্টা করেছি, তবে আমি সাফল্য
পাইনি

উত্তর:


15

মেহুল, আমি স্মার্টস্ট্রিটস নামে একটি সংস্থার সাথে ঠিকানা যাচাইকরণ শিল্পে কাজ করতাম। সেখানে প্রচুর জিওকোডিং পরিষেবা রয়েছে তবে আপনার প্রয়োজনীয় ভলিউমের সাথে খুব কম লোকই ব্যাচ প্রসেসিং সমর্থন করবে support (গুগল এবং অন্যান্যরা তাদের এপিআই বা স্টোরিং / ক্যাশে ফলাফলের প্রচুর ব্যবহারের অনুমতি দেয় না))

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

লাইভএড্রেস এমন একটি পরিষেবা যা ইউএসপিএস দ্বারা সিএএসএস -প্রত্যয়িত । আপনার গবেষণাটি করার মতো কয়েকটি আছে তবে আপনি "অন-দ্য ফ্লাই" / দ্রুত এবং সস্তার কিছু চান তাই আবার লাইভএড্রেস সুপারিশ করছি। এটি কেবল ঠিকানাটি যাচাই করবে না তবে এটি আপনার প্রয়োজন অনুসারে করবে যা ল্যাট / লম্বা তথ্য সরবরাহ করে এবং জিওকোডিং ফলাফলের নির্ভুলতাও সরবরাহ করে। এটি সমস্ত ওয়েব-ভিত্তিক এবং কয়েক মিলিয়ন রেকর্ড অকার্যকরভাবে প্রক্রিয়া করবে ( এই প্রশ্নটিকে একটি রেফারেন্স হিসাবে দেখুন )।

ব্যবহারকারীদের ইন্টারঅ্যাক্ট করার সাথে সাথে আপনার যদি ঠিকানাগুলির জিওকোড করার দরকার পড়ে তবে লাইভএড্রেসসের একটি এপিআই সংস্করণ রয়েছে যা কেবলমাত্র যেকোন কিছুতে প্লাগ করতে পারে এবং এটি ব্যাচ প্রসেসিংটিকে অন-দ্য ফ্লাইও সমর্থন করে, তবে সাবস্ক্রিপশন হিসাবে প্রদান করা হয়, এক সময় নয় not পেমেন্ট।


স্মার্টস্ট্রিটের সাথে পরিচিত নয়, আশাব্যঞ্জক দেখাচ্ছে, মাথা আপ করার জন্য ধন্যবাদ।
ডেরেক সুইংলে

লাইভএড্রেস এপিআই প্রায় 5-10 মিনিটের মধ্যে 300,000 করবে। তালিকার পরিষেবাগুলির জন্য লাইভ অ্যাড্রেস (প্রক্রিয়াজাতকরণের জন্য একটি তালিকা আপলোড করুন) লাগে 15-20 মিনিট। দু'জনেই বেশ দ্রুতগতিতে। তালিকা পরিষেবাটির জন্য আপনাকে কোনও কোড লেখার প্রয়োজন হবে না।
জেফ্রি

2
স্মার্টস্ট্রিটস কেবল মার্কিন যুক্তরাষ্ট্রের জিওকোডস?
ম্যাপারজ

আমার কাছে ডেটা আছে যা সিঙ্গাপুরের জন্য কাজ করবে? কোনও নির্দেশনা না থাকলে আপনি আমাকে দিতে পারেন ????
ব্যবহারকারী 1089553

গুগল বিং এবং অন্যান্য সরবরাহকারীদের সাথে অনেকগুলি কপিরাইট বিধি রয়েছে। আপনি ডেটা রফতানি করবেন না!

11

আপনি যদি পাইথন মতো, আপনি ব্যবহার করতে পারে GeoPy এপিআই , সঙ্গে মিলিত GDAL পাইথন বাইন্ডিং বা Fiona, এবং একটি বিন্দু shapefile করার ঠিকানাগুলি রূপান্তরের জন্য ভালো একটি খুব মৌলিক স্ক্রিপ্ট তৈরি করুন।

এটি 'address_to_geocode' নামে একটি ফাইল জিওলোকট করবে, আমার_আউটপুট ফোল্ডারে '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

এখানে আমি গুগল এপিআই ব্যবহার করছি তবে জিওপাইয়ের সাথে ইয়াহু !, জিওনামস বা ম্যাপপয়েন্টের মতো ভিন্ন ভিন্ন এপিআইতে স্যুইচ করা খুব বেসিক


এটা অসাধারণ! ধন্যবাদ মানুষ! যাই হোক, বর্তমানে (01/2016) এ, 'geocoders.Google ()' 'geocoders.GoogleV3 ()' থেকে হিসাবে পরিবর্তন করা উচিত geopy.readthedocs.org/en/1.11.0
umbe1987

1

আপনার সমস্যার সমাধানের জন্য আরেকটি বিকল্প হ'ল আপনার ডেটাसेटটি ফিউশন টেবিলগুলিতে আমদানি করা এবং ঠিকানার ক্ষেত্রটিকে অবস্থান হিসাবে সেট করা। তারপরে এটি পয়েন্টগুলি স্বয়ংক্রিয়ভাবে জিওকোড করবে। একবার সম্পূর্ণ হয়ে গেলে আপনি কেএমএল হিসাবে ডেটা রফতানি করতে পারেন।

বিকল্প হিসাবে, আপনি ইয়াহু জিওকোডার ব্যবহারের জন্য একটি পিএইচপি স্ক্রিপ্ট লিখতে পারেন যার সীমা 50,000 রেকর্ড রয়েছে, তাই খুব শীঘ্রই বা আপনার পয়েন্টগুলির সমস্তটি আপনার ডাটাবেসে জিওকোড করা হবে।

আমি আশা করি এটি সাহায্য করেছে!


ধন্যবাদ তমস তবে আমি কিমিএল পেতে এবং তারপরে সেখান থেকে তথ্য আনতে এবং তারপরে এম ডিবি করতে চাই না। আমি ইয়াহু জিওকোডিংয়ের ধারণাটি পছন্দ করি তবে আমি তার যথার্থতার বিষয়ে খুব বেশি নিশ্চিত নই, কারণ আমি কখনই ম্যাপিংয়ের জন্য ইয়াহু ব্যবহার করি নি। আপনার কোনও স্ক্রিপ্ট লিখিত বা কিছু আছে কিনা দয়া করে আমাকে জানান। এটি দুর্দান্ত সাহায্য
ব্যবহারকারী 1089553

মনে রাখবেন যে ইয়াহু (বা গুগল, সেই বিষয়টির জন্য) স্বয়ংক্রিয় প্রশ্নগুলির সাথে বা কোনও মানচিত্র না দেখিয়ে জিওকোডার ব্যবহার করা টিওএস লঙ্ঘন করবে ...
ম্যাট

যতদূর আমি জানি, আপনি যদি কোনও মানচিত্রে আউটপুট উপস্থাপন করেন তবে তা নয়। আমি ভুল হলে আমাকে সংশোধন কর!
EZMapdesign

@ তমাস প্রকারের তবে এটি দেখুন: developers.google.com/maps/terms#section_10_1_3
ম্যাট

1

এখন পর্যন্ত আমি সেরা এবং সহজ জিওকোডারটি https://pypi.python.org/pypi/geocoder/1.8.0 বিং মানচিত্র, গুগল মানচিত্র, ওএসএম ইত্যাদি ব্যবহার করেছি ..


0

আপনার প্রশ্নের সেরা উত্তর নাও হতে পারে তবে আপনি ব্যাচজিও চেষ্টা করতে পারেন। নিখরচায় সংস্করণ আপনাকে অনেক ক্ষতি করতে পারে তবে আমার কাজের জন্য এটি যথেষ্ট ভাল ছিল। যদিও, আমরা প্রো সংস্করণটি কিনেছি।

কেএমএল ফাইল থেকে স্থানাঙ্ক পাওয়ার কৌশলটি এটি পরে আরকজিআইএসে আমদানি করা।


ধন্যবাদ, আমি কীভাবে ব্যাচজিও করব তা আমাকে বলতে পারেন, বিনামূল্যে সংস্করণের নামগুলিও জানতে পারবেন (আমি গুগল ম্যাপ এপিআই ভি 3 এর জন্য চেষ্টা করছিলাম)। এছাড়াও এর অর্থ এই যে এটি ল্যাপ / লং মানগুলি মানচিত্রের জন্য আমার ডাটাবেসে সংরক্ষণ করতে হবে। এটিই আমি প্রথম স্থানে করতে চেয়েছিলাম।
ব্যবহারকারী 1089553

ব্যাচজিওর সাহায্যে আপনাকে আপনার ডাটাবেসে কেএমএল আমদানি করতে হবে তারপর স্থানাঙ্কগুলি বের করতে হবে, গুগল স্থানাঙ্ক সরবরাহ করতে নিষেধ করায় আমি অন্য কোনও উপায় জানি না। ইয়াহু সম্পর্কে, তুরস্কের সাথে আমার অভিজ্ঞতা সত্যই উজ্জ্বল নয়। বেশিরভাগ উন্নয়নশীল দেশ ইয়াহু'র সুযোগ থেকে দূরে রয়েছে। অনিল।
আনল সেলিক

0

আমি সফলভাবে জিওপি ব্যবহার করছি যা গুগল জিওকোডিং ওয়েব পরিষেবা ব্যবহার করে। এটি 24 ঘন্টা প্রতি 2k পয়েন্ট পর্যন্ত পুরোপুরি কাজ করে।


0

মেটেজ, থ্যাটস কারণ গুগল এপিআই প্রতিদিন 2.5 কে পর্যন্ত আপ টানতে দেয়।
জিও সলিউশন সম্পর্কে, ব্যাচটি এখনও সমর্থনযোগ্য হিসাবে পাওয়া যায় নি কারণ এটি জিও পাইথন কোডটি পর্যালোচনা করে দেখা যায় যে তিনি যখনই নতুন কর্ডিনেটের জন্য অনুরোধ করবেন ততবার সংযোগ চালু হবে, 300k সম্ভবত চিরতরে আটকে থাকবে (সম্ভবত 400 ত্রুটি সহ)।
পলিগনস নিয়ে খেলুন কৌশলটি করা উচিত তবে এটি আপনার 'প্লে গ্রাউন্ড' অঞ্চলটি 1 দেশ বা এন দেশগুলির ক্ষেত্রে নির্ভর করে।
1 দেশের জন্য বহুভুজগুলি বেশ সুন্দর কাজ করা উচিত।
N দেশগুলির ক্ষেত্রে সমাধান কাজ করবে না কারণ আপনি যে কোনও দেশ যুক্ত করলে যে কোনও সময় সংগ্রহ আরও বেশি সময় নেয়। এটি করার জন্য সেরা এপ্রোচ হ'ল অলস বোঝা।
=> বহুভুজ ধারণা দিয়ে শুরু করুন, অন্য দেশের প্রতিটি জিনিস, ডেটা ধরে রাখতে একটি বড় ডাটাবেস টেবিল তৈরি করুন, শেষ পর্যন্ত আপনি আমার যে ডেটা ধরে নেবেন তা আপনার ধারণ করবে।


0

আপনি যদি পিএইচপি - মাইএসকিউএল দিয়ে এটি করতে চান তবে আমার জন্য কাজ করা একটি সমাধান এখানে রয়েছে:

<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 (বেশিরভাগ ইউরোপীয় দেশগুলির জন্য কাজ করে)

বা, আপনি রেস্ট / জেএসএন এপিআই অ্যাক্সেস করার জন্য নিজের কোডটি লিখতে পারেন: http://geocode.xyz/api (এটি সীমাহীন অনুসন্ধানের জন্য বিনামূল্যে)


0

ম্যাপুইটিং সরঞ্জামগুলি (মানচিত্র নির্দেশক | ব্যাচ জিওকোডিং সরঞ্জাম ( http://www.mappointing.com/ )) ব্যবহার করুন এই সরঞ্জামটিতে আপনি গুগল ম্যাপ ফ্রি এপিআই কী ব্যবহার করে ডেটা প্রক্রিয়া করতে পারেন। এবং এছাড়াও এই সরঞ্জামটি দূরত্ব গণনা এবং স্থান অনুসন্ধান সরঞ্জাম সরবরাহ করে।


কেন এটি উল্লিখিত একই API সীমাতে আঘাত করবে না?
lynxlynxlynx
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.