আপনি যদি পাইথন মতো, আপনি ব্যবহার করতে পারে 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
এখানে আমি গুগল এপিআই ব্যবহার করছি তবে জিওপাইয়ের সাথে ইয়াহু !, জিওনামস বা ম্যাপপয়েন্টের মতো ভিন্ন ভিন্ন এপিআইতে স্যুইচ করা খুব বেসিক ।