ThinkGeo.com    |     Documentation    |     Premium Support

Reverse Geo Code MArkers

I can create markers on the map but is there a way to make a button that makes a click create a marker to a maximum of two markers and then be able to reverse geo code the markers? 



Nevermind i figured out how to do it on map click, but im having trouble finding my reverse geo coding function  here is my code to get to it




if (document.getElementById(‘checkedmarker’).checked) {
           var params = { x: d.worldXY.lon, y: d.worldXY.lat, scale: olMap.getScale() };
           Map1.ajaxCallAction(“Home.mvc”, ‘reverseGeoCoding’, params, function (result) {
               window.alert(‘back’);
           });
       }

then i need to create the marker and geo code it 




[MapActionFilter]
     public Collection<Feature> reverseGeoCoding(object[] args)
      {
          PointShape inputLocation = new PointShape(double.Parse(args[0].ToString()), double.Parse(args[1].ToString()));
 
          PointShape p = new PointShape();
          ShapeFileFeatureLayer streetLayer = new ShapeFileFeatureLayer();
          streetLayer.Open();
          Collection<Feature> resultFeatures = streetLayer.QueryTools.GetFeaturesNearestTo(inputLocation, GeographyUnit.DecimalDegree, 1, ReturningColumnsType.AllColumns);
 
          return resultFeatures;
      }




Hi Gordon,



Please try to use “MapHelper.ConvertFeaturesToJson” method and catch the json feature in client side. A similar sample is “DrawEdit Sample” in howDoI samples. Please try it.


[MapActionFilter]
        public string EditShape(Map map, GeoCollection<object> args)
        {
            LayerOverlay dynamicOverlay = (LayerOverlay)map.CustomOverlays[“DynamicOverlay”];
            InMemoryFeatureLayer shapeLayer = (InMemoryFeatureLayer)dynamicOverlay.Layers[“shapeLayer”];
            string featuresJson = MapHelper.ConvertFeaturesToJson(shapeLayer.InternalFeatures);
            shapeLayer.InternalFeatures.Clear();
            return featuresJson;
        }

Any questions, don’t hesitate to let us know.

Thanks,

Troy

i have it to where i can place markers on the screen but when i try to return the nearest feature it comes back with the same one every time 




[MapActionFilter]
      public Collection<Feature> addMarkerDrive(Map map, GeoCollection<object> args)
      {
          InMemoryMarkerOverlay markerOverlay = (InMemoryMarkerOverlay)map.CustomOverlays["MarkerOverlay"];
          PointShape inputLocation = new PointShape(double.Parse(args[0].ToString()), double.Parse(args[1].ToString()));
          markerOverlay.FeatureSource.InternalFeatures.Add(new Feature(inputLocation));
          PointShape p = new PointShape();
          ShapeFileFeatureLayer streetLayer = new ShapeFileFeatureLayer(SessionHandler.WebCenterlineLocation);
          streetLayer.Open();
          Collection<Feature> resultFeatures = streetLayer.QueryTools.GetFeaturesNearestTo(inputLocation, GeographyUnit.DecimalDegree, 2, ReturningColumnsType.AllColumns);
          return resultFeatures;
      }

is there something i am doing wrong?


Hi Gordon,



The codes looks right. I have some guesses and you may verify them. 1. Please make sure the inputLocation is different in each call. 2. Keep the inputLocation and the streetLayer are at the same projection, I noticed you are using GeographyUnit.DecimalDegree in GetFeaturesNearestTo method, so the inputlocation and the streetLayer’s coordinates should also be decimal degree.



If the issue persists, it’s better you can attach more codes or the data for debug.

Thanks,

Troy