ThinkGeo.com    |     Documentation    |     Premium Support

Gecoder is support for india or other countries?

Hi Team,


As per our requirement we required to find addresses and locate that address with point out with some symbol and we have seen your Geocoder Tool and it is very great tool to find address and locate that address but we need to confirm that is it supported for india or other countries?


Waiting for your kindly response.


Thanks in advance.


Anish Patel.



Anish, 
  
 Thanks for your question and welcome to our forum. 
  
 Technically, the Map Suite Geocoder could support any countries or area if the user has suitable data and then create a custom Geocoder inherit from GeoCoder base class and implement MatchCore method. But so far, we only provide UsaGeoCoder which only support geocode in USA. 
  
 Feel free to let us know if you have more questions. 
  
 Thanks,. 
 James 


Hi James,


Thanks for your response.


I have downloaded OpenStreetMap data from "osmdata.thinkgeo.com/openst...india.zip"  file which contains different shape files  and other files like .dbf etc...


Now using above source I want to find out the location like If user enter "Amreli" in textbox and click on button I want to set marker with on perticular location like "Amreli".


As per your reply UsaGeocoder only for USA and Geocoder to support for india and other country we need to implement "MatchCore" method to find out location on map so, can you please provide sample example how to implement "MatchCore" method with custom data like india?


Waiting for your kindly response.


Thanks in advance,


Anish Patel.



Anish, 


As you example, I think you search the files which contains location information such as “Amreli” and the geographical location (x, y) with certain projection such as wgs84(decimal degree). We have HowDoI samples which you can find the samples show to how to implement the custom data, such as “Create a text file MatchingPlugin”, when you install the MapSuiteGeoCoder package you will find them at installation folder.


PS: you can find detail information for open street map at wiki.thinkgeo.com/wiki/Map_S...Data_Guide , if the “Amreli” represents a city or other point shape, you may use places.shp, if it represents a road or other line shape, you may use roads.shp


Let me know if you have more questions.


Thanks,


James



Hi James,


Thanks for your reply.


Below is source code which I have written to find the "Amreli" location.


First, I have create one .dbf file which contain "Amreli" location with longitute and latitue of "Amreli". I have attached the Data.zip file which contains Data.dbf.


Second, I have created on demo applicaiton which source code as below.


private void Form1_Load(object sender, EventArgs e)

        {

            // Setting up the map unit and set the Chicago extent

            winformsMap1.MapUnit = GeographyUnit.DecimalDegree;

            winformsMap1.CurrentExtent = new RectangleShape(-125, 50, -66, 23);



            // Create the overlay and add it to the map

            LayerOverlay mainOverlay = new LayerOverlay();

            winformsMap1.Overlays.Add("mainOverlay", mainOverlay);



            // Setup the World Map Kit WMS Overlay

            WorldMapKitWmsDesktopOverlay worldMapKitOverlay = new WorldMapKitWmsDesktopOverlay();

            winformsMap1.Overlays.Add("WorldMapKitOverlay", worldMapKitOverlay);



            // Setup the marker overlay and add it to the map            

            LayerOverlay markerOverlay = new LayerOverlay();

            winformsMap1.Overlays.Add("MarkerOverlay", markerOverlay);



            // Setup the marker layer

            InMemoryFeatureLayer markerLayer = new InMemoryFeatureLayer();

            markerLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

            markerLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle =  PointStyles.CreateSimplePointStyle(PointSymbolType.Circle,  GeoColor.SimpleColors.Red, 10);

            markerOverlay.Layers.Add("MarkerLayer", markerLayer);



            winformsMap1.Refresh();

        }



        private void button1_Click(object sender, EventArgs e)

        {

            ThinkGeo.MapSuite.MapSuiteGeocoder.Geocoder geocoder = new ThinkGeo.MapSuite.MapSuiteGeocoder.Geocoder();

            geocoder.MatchingPlugIns.Add(new CityDbfMatchingPlugin(@"C:\GIS R & D\india\Data.dbf"));



            // Open the geocoder, get any matches and close it

            Collection geocoderMatches;

            try

            {

                geocoder.Open();

                geocoderMatches = geocoder.Match(textBox1.Text);





                InMemoryFeatureLayer markerLayer = winformsMap1.FindFeatureLayer("MarkerLayer") as InMemoryFeatureLayer;

                if (geocoderMatches.Count > 0)

                {

                    lstResult.Items.Clear();

                    lstResult.Items.Add(geocoderMatches[0].ToString());

                    PointShape pointShape = new PointShape(geocoderMatches[0].NameValuePairs["CentroidPoint"]);

                    winformsMap1.Overlays["MarkerOverlay"].Lock.EnterWriteLock();

                    try

                    {

                        markerLayer.Open();

                        markerLayer.EditTools.BeginTransaction();

                        markerLayer.EditTools.Add(new Feature(pointShape));

                        markerLayer.EditTools.CommitTransaction();

                    }

                    finally

                    {

                        markerLayer.Close();

                        winformsMap1.Overlays["MarkerOverlay"].Lock.ExitWriteLock();

                    }

                    winformsMap1.CurrentExtent = new RectangleShape(geocoderMatches[0].NameValuePairs["BoundingBox"]);

                    winformsMap1.Refresh();

                }

            }

            finally

            {

                geocoder.Close();

            }

        }

<geocodermatch></geocodermatch>


After run the Application I am able to see map on screen and enter value in Text Box "Amreli" and click on button but I am not find location "Amreli" on map. (geocoderMatches.Count = 0) can you please guide where is my mistake or is it correct format .dbf file?


Waiting for your kindly response.


Thanks in advance.


Anish Patel.



001_Data.zip (255 Bytes)

 Anish,


I have created a sample code to show a custom MatchingPlugIn to implement your requirement, so that you can get to know how to use our extensiable API and create your own geocoder engine.


            ThinkGeo.MapSuite.MapSuiteGeocoder.Geocoder geocoder = new ThinkGeo.MapSuite.MapSuiteGeocoder.Geocoder();
            geocoder.MatchingPlugIns.Add(new CusomMatchingPlugIn(@"C:\GIS R & D\india\Data.dbf"));

            Collection<GeocoderMatch> geocoderMatches;

public class CusomMatchingPlugIn : MatchingPlugin
    {
        private string pathFileName;

        public CusomMatchingPlugIn(string pathFileName)
        {
            this.pathFileName = pathFileName;
        }

        protected override Collection<GeocoderMatch> MatchCore(string sourceText)
        {
            Collection<GeocoderMatch> result = new Collection<GeocoderMatch>();
            GeoDbf geoDbf = new GeoDbf(pathFileName);
            geoDbf.Open();
            for (int i = 0; i < geoDbf.RecordCount; i++)
            {
                Dictionary<string, string> record = geoDbf.ReadRecordAsString(i + 1);
                if (string.Compare(record["DT_CITY"], sourceText, true) == 0)
                {
                    GeocoderMatch geocoderMatch = new GeocoderMatch();
                    foreach (var item in record)
                    {
                        geocoderMatch.NameValuePairs.Add(item.Key, item.Value);
                    }
                    result.Add(geocoderMatch);
                }
            }
            geoDbf.Close();

            return result;
        }
    }

Thanks,


James