【问题标题】:Reverse Geocoding (generating address through latitude and longitude)反向地理编码(通过经纬度生成地址)
【发布时间】:2017-04-06 11:09:07
【问题描述】:

当我通过我的项目点击谷歌反向地理编码 api 时,我得到了这个 json 对象。但问题是我只需要“结果”数组下的“form_address”部分,但不知道该怎么做。请帮助我。我刚开始编程..现在我将如何从这个控制器代码中显示地图..我在列表对象“sale”中有纬度和经度..还有我从谷歌 api 获得的位置。

{
   "results" : [
  {
     "address_components" : [
        {
           "long_name" : "A-202",
           "short_name" : "A-202",
           "types" : [ "street_number" ]
        },
        {
           "long_name" : "Western Express Highway",
           "short_name" : "Western Express Hwy",
           "types" : [ "route" ]
        },
        {
           "long_name" : "Chinchpada",
           "short_name" : "Chinchpada",
           "types" : [ "political", "sublocality", "sublocality_level_2" ]
        },
        {
           "long_name" : "Borivali East",
           "short_name" : "Borivali East",
           "types" : [ "political", "sublocality", "sublocality_level_1" ]
        },
        {
           "long_name" : "Mumbai",
           "short_name" : "Mumbai",
           "types" : [ "locality", "political" ]
        },
        {
           "long_name" : "Mumbai Suburban",
           "short_name" : "Mumbai Suburban",
           "types" : [ "administrative_area_level_2", "political" ]
        },
        {
           "long_name" : "Maharashtra",
           "short_name" : "MH",
           "types" : [ "administrative_area_level_1", "political" ]
        },
        {
           "long_name" : "India",
           "short_name" : "IN",
           "types" : [ "country", "political" ]
        },
        {
           "long_name" : "400066",
           "short_name" : "400066",
           "types" : [ "postal_code" ]
        }
     ],
     "formatted_address" : "A-202, Western Express Hwy, Chinchpada, Borivali East, Mumbai, Maharashtra 400066, India",
     "geometry" : {
        "location" : {
           "lat" : 19.2186167,
           "lng" : 72.86424029999999
        },
        "location_type" : "ROOFTOP",
        "viewport" : {
           "northeast" : {
              "lat" : 19.2199656802915,
              "lng" : 72.86558928029149
           },
           "southwest" : {
              "lat" : 19.2172677197085,
              "lng" : 72.86289131970848
           }
        }
     },
     "place_id" : "ChIJEfow2tGw5zsRl3X0IN7Nu7Y",
     "types" : [ "street_address" ]
  }
   ],
   "status" : "OK"
   }

我的控制器代码.cs

public ActionResult Index()
    {
        List<salepros> sale = new List<salepros>();           
        string sqlquery = "select prospectid,latitude, longitude, location from sale_prospectdet where createdby = {0} order by createdon desc";
        sqlquery = string.Format(sqlquery, "*");
        DataTable dt = DbHelper.ExecuteDataset(Globals.GetConnectionString(), CommandType.Text, sqlquery).Tables[0];

        for (int i = 0; i < dt.Rows.Count; i++)
        {               
            salepros saleobject = new salepros();
            string conditionLoc = Convert.ToString(dt.Rows[i]["location"]);
            string conditionLat = Convert.ToString(dt.Rows[i]["latitude"].ToString());
            string conditionLong = Convert.ToString(dt.Rows[i]["latitude"].ToString());
            if (conditionLat == "" && conditionLong == "")
                {
                    saleobject.latitude = "";
                    saleobject.longitude = "";
                    saleobject.Location = "No Location Found";
                }
             else if (conditionLoc == "")
                    {                    
                        saleobject.latitude = Convert.ToString(dt.Rows[i]["latitude"].ToString());
                        saleobject.longitude = Convert.ToString(dt.Rows[i]["longitude"].ToString());
                        saleobject.prospectdetid = Convert.ToInt32(dt.Rows[i]["prospectdetid"]);
                        string apiurl = string.Format("https://maps.googleapis.com/maps/api/geocode/json?key=mykey&latlng=" + saleobject.latitude + "," + saleobject.longitude);
                        string strresponse = CommonFunctions.GetResponse(apiurl, "Get", null, null);

                        JSONClass jsonclass = JsonConvert.DeserializeObject<JSONClass>(strresponse);
                        if (jsonclass.status == "ZERO_RESULTS")
                            {
                                saleobject.Location = "No Location Found";
                            }
                        else
                            {
                                saleobject.Location = jsonclass.results[0].formatted_address;
                                string locationquery = "UPDATE `sale_prospectdet` SET `location`='{0}' WHERE `prospectdetid`={1}";
                                locationquery = string.Format(locationquery, saleobject.Location, saleobject.prospectdetid);
                                int rowsaffected = DbHelper.ExecuteNonQuery(Globals.GetConnectionString(), CommandType.Text, locationquery);
                            }
                    }
                 else
                    {
                        saleobject.latitude = Convert.ToString(dt.Rows[i]["latitude"].ToString());
                        saleobject.longitude = Convert.ToString(dt.Rows[i]["longitude"].ToString());
                        saleobject.Location = Convert.ToString(dt.Rows[i]["location"]);                    
                    }
            sale.Add(saleobject);
        }                   

    return View("Location", sale);

【问题讨论】:

    标签: c# .net google-maps model-view-controller reverse-geocoding


    【解决方案1】:

    你可以通过“results”数组的results[0].formatted_address获取formatted_address

    var geocoder;
    var map;
    var infowindow = new google.maps.InfoWindow();
    var marker;
    
    function initialize() {
      geocoder = new google.maps.Geocoder();
      map = new google.maps.Map(document.getElementById("map"), {
        zoom: 8,
        center: new google.maps.LatLng(12.960752, 77.641934),
        mapTypeId: google.maps.MapTypeId.ROADMAP
      });
    }
    
    function codeLatLng() {
      if (marker && marker.setMap) {
        marker.setMap(null); /*clear previous marker*/
      }
      var input = document.getElementById("latlng").value;
      var latlngStr = input.split(",", 2);
      var lat = parseFloat(latlngStr[0]);
      var lng = parseFloat(latlngStr[1]);
      var latlng = new google.maps.LatLng(lat, lng);
      geocoder.geocode({
        'latLng': latlng
      }, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
          if (results[0]) {
            map.setZoom(11);
            marker = new google.maps.Marker({
              position: latlng,
              map: map
            });
            infowindow.setContent(results[0].formatted_address);
            infowindow.open(map, marker);
            /*formatted address*/
            document.getElementById('formatted_address').innerText = results[0].formatted_address 
    
          } else {
            alert("No results found");
            document.getElementById('formatted_address').innerText = "No result"
          }
        } else {
          alert("Geocoder failed due to: " + status);
        }
      });
    }
    <script type="text/javascript" src="https://maps.google.com/maps/api/js"></script>
    
    <body onload="initialize()">
      <div align="center" style="height: 30px; width: 430px">
        <input id="latlng" type="text" value="12.960752, 77.641934">
        <input type="button" value="Reverse Geocode" onclick="codeLatLng()">
      </div>
      <div id="map" style="height: 200px; width: 430px"></div>
      <p>
        Address:
      </p>
      <p id="formatted_address">
    
      </p>

    【讨论】:

    • 运行sn-p时点击整页查看效果更好
    • 非常感谢兄弟。
    • bt 我正在通过我的控制器调用反向测地 api,然后我必须在视图中显示地图..
    • 在视图中通过 JavaScript onload 函数调用codeLatLng(obj)。将纬度和经度作为obj 参数传递给函数和函数内部var latlngStr = obj.split(",", 2);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多