2011-01-28 38 views
8

Tha thứ cho tôi vì sự thiếu hiểu biết của tôi, nhưng sau vài giờ tìm kiếm, tôi có chút may mắn.Làm việc với API vị trí của Google

Dù sao, tôi đang cố gắng viết một ứng dụng máy tính để bàn nhỏ cho phép người dùng nhập địa chỉ và sau đó có vị trí gần đúng của họ được trả về trong tọa độ GPS. Từ những gì tôi có thể nói, Google cung cấp một API mã hóa địa lý [1] cho phép các yêu cầu trong các hình thức sau đây:

http://maps.googleapis.com/maps/api/geocode/output?parameters

Trong khi tôi quen với cách viết các ứng dụng cơ bản C Sharp, tôi thực sự không có ý tưởng từ đâu bắt đầu khi nói đến giao tiếp với API này. Bất kỳ trợ giúp nào mà các bạn có thể cung cấp sẽ được đánh giá cao.

Trả lời

2

API Geocode khá đơn giản, để có được lat/lon từ api, bạn chỉ cần 3 thông số: đầu ra, cảm biến và địa chỉ.

đầu ra định dạng đầu ra mà bạn muốn, json hoặc xml (IIRC)

cảm biến phải là một chỉ thời tiết boolean hoặc không phải là giá trị xuất phát từ một cảm biến như một chip GPS.

địa chỉ phải là địa chỉ (đừng quên mã hóa url nó) bạn muốn mã hóa địa lý.

Đây là một ví dụ, nơi tôi mã địa lý địa chỉ văn phòng của tôi, và nhận được JSON trong phản ứng: http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=1+Maritime+Plaza+San+Francisco+CA

Nếu bạn điều hướng đến đó bạn sẽ thấy một cái gì đó như:

{ 
    "status": "OK", 
    "results": [ { 
    "types": [ "street_address" ], 
    "formatted_address": "1 Maritime Plaza, San Francisco, CA 94111, USA", 
    "address_components": [ { 
     "long_name": "1", 
     "short_name": "1", 
     "types": [ "street_number" ] 
    }, { 
     "long_name": "Maritime Plaza", 
     "short_name": "Maritime Plaza", 
     "types": [ "route" ] 
    }, { 
     "long_name": "San Francisco", 
     "short_name": "San Francisco", 
     "types": [ "locality", "political" ] 
    }, { 
     "long_name": "San Francisco", 
     "short_name": "San Francisco", 
     "types": [ "administrative_area_level_3", "political" ] 
    }, { 
     "long_name": "San Francisco", 
     "short_name": "San Francisco", 
     "types": [ "administrative_area_level_2", "political" ] 
    }, { 
     "long_name": "California", 
     "short_name": "CA", 
     "types": [ "administrative_area_level_1", "political" ] 
    }, { 
     "long_name": "United States", 
     "short_name": "US", 
     "types": [ "country", "political" ] 
    }, { 
     "long_name": "94111", 
     "short_name": "94111", 
     "types": [ "postal_code" ] 
    } ], 
    "geometry": { 
     "location": { 
     "lat": 37.7953907, 
     "lng": -122.3991803 
     }, 
     "location_type": "ROOFTOP", 
     "viewport": { 
     "southwest": { 
      "lat": 37.7922431, 
      "lng": -122.4023279 
     }, 
     "northeast": { 
      "lat": 37.7985383, 
      "lng": -122.3960327 
     } 
     } 
    } 
    } ] 
} 

Nếu bạn lấy lat/lon được cung cấp và đặt nó trên map bạn thấy một con trỏ trên tòa nhà văn phòng của tôi.

+0

tôi sẽ chắc chắn để thử này ra. Tôi chỉ muốn cảm ơn trong khi chờ đợi, tôi thực sự đánh giá cao nó. –

+0

Nếu bạn thêm thông số vùng tùy chọn, nó sẽ cố gắng trở lại vị trí ở đó khó hơn. –

0

Nếu bạn làm điều này trong C#, bạn sẽ muốn sử dụng các lớp HttpWebRequest và HttpWebResponse. Bạn có thể chuyển URL tham số (gọi API của Google) làm đối số cho phương thức Create(). Tôi sẽ đề nghị yêu cầu dữ liệu được trả về dưới dạng dữ liệu XML. Sau khi bạn đóng kết nối (httpWResp.Close()), bạn có thể đọc bằng trình đọc luồng. Xem tài liệu về phương pháp GetResponseStream(): http://msdn.microsoft.com/en-us/library/system.net.httpwebresponse.getresponsestream.aspx

HttpWebRequest HttpWReq = (HttpWebRequest) WebRequest.Create ("http://maps.googleapis.com/maps/api/geocode/xml?sensor=false & địa chỉ = 1 + Hàng + Plaza + San + Francisco + CA ");

HttpWebResponse HttpWResp = (HttpWebResponse) HttpWReq.GetResponse(); // Chèn mã sử dụng đối tượng phản hồi. HttpWResp.Gần();

6

Dưới đây là một số mẫu mã để có được những gì bạn muốn

using System; 
using System.Web; 
using System.Net; 
using System.Runtime.Serialization.Json; 

namespace GoogleMapsSample 
{ 
    public class GoogleMaps 
    { 

     /// <summary> 
     /// 
     /// </summary> 
     /// <param name="address"></param> 
     /// <returns></returns> 
     public static GeoResponse GetGeoCodedResults(string address) 
     { 
      string url = string.Format(
        "http://maps.google.com/maps/api/geocode/json?address={0}&region=dk&sensor=false", 
        HttpUtility.UrlEncode(address) 
        ); 
      var request = (HttpWebRequest)HttpWebRequest.Create(url); 
      request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate"); 
      request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 
      DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(GeoResponse)); 
      var res = (GeoResponse)serializer.ReadObject(request.GetResponse().GetResponseStream()); 
      return res; 
     } 


    } 

và bạn lớp helper sẽ

namespace GoogleMapsSample 
{ 
    [DataContract] 
    public class GeoResponse 
    { 
     [DataMember(Name = "status")] 
     public string Status { get; set; } 
     [DataMember(Name = "results")] 
     public CResult[] Results { get; set; } 

     [DataContract] 
     public class CResult 
     { 
      [DataMember(Name = "geometry")] 
      public CGeometry Geometry { get; set; } 

      [DataContract] 
      public class CGeometry 
      { 
       [DataMember(Name = "location")] 
       public CLocation Location { get; set; } 

       [DataContract] 
       public class CLocation 
       { 
        [DataMember(Name = "lat")] 
        public double Lat { get; set; } 
        [DataMember(Name = "lng")] 
        public double Lng { get; set; } 
       } 
      } 
     } 

     public GeoResponse() 
     { } 
    } 


} 

Sau đó, bạn có thể sử dụng mã này trong kiểm soát của bạn/winforms như thế này

  GeoResponse response = new GeoResponse(); 
      response = GoogleMaps.GetGeoCodedResults(TextBoxPostcode.Text); 

và xây dựng JS trên mã phía sau bằng cách sử dụng StringBuilder hoặc anyting else

13

tài liệu đầy đủ NET thư viện -

Maps Web Services Google API wrapper cho .NET https://github.com/maximn/google-maps/

//Directions 
DirectionsRequest directionsRequest = new DirectionsRequest() 
{ 
     Origin = "NYC, 5th and 39", 
     Destination = "Philladephia, Chesnut and Wallnut", 
}; 

     DirectionsResponse directions = MapsAPI.GetDirections(directionsRequest); 

//Geocode 
GeocodingRequest geocodeRequest = new GeocodingRequest() 
{ 
     Address = "new york city", 
}; 


GeocodingResponse geocode = MapsAPI.GetGeocode(geocodeRequest); 

Console.WriteLine(geocode); 

//Elevation 
ElevationRequest elevationRequest = new ElevationRequest() 
{ 
     Locations = new Location[] { new Location(54, 78) }, 
}; 


ElevationResponse elevation = MapsAPI.GetElevation(elevationRequest); 

Console.WriteLine(elevation); 
+0

Bất kỳ ai đã thử API này trên ứng dụng MVC3 C#? Về phía tôi, nó đang tải trang trong một thời gian dài: -? Nhưng khi tôi chạy một ứng dụng giao diện điều khiển tất cả mọi thứ đang làm việc tốt. – czetsuya

+0

@czetsuya Tôi gặp vấn đề tương tự với phiên bản mới nhất trên GitHub tối qua. chỉ xuất hiện để treo và không bao giờ phục hồi ... – Killnine

+0

Chúng tôi vừa sửa nó vài ngày trước. Hãy đảm bảo rằng bạn đang chạy trên phiên bản mới nhất. Ngoài ra, tôi sẽ tải lên một gói nuget trong những ngày tiếp theo. – Maxim

1

Gần đây tôi đã phải xây dựng một cửa hàng Locator cho một dự án tôi đang làm việc trên. Trước đây tôi chưa bao giờ sử dụng bất kỳ API Google hoặc Bing nào. Sử dụng hướng dẫn này, tôi có thể nắm bắt được vị trí API khá tốt. Tôi sẽ đề nghị đi qua hướng dẫn này và vào cuối của ba hướng dẫn bạn nên có một sự hiểu biết tốt.

Building a Store Locator ASP.NET Application Using Google Maps API (Part 1)

Building a Store Locator ASP.NET Application Using Google Maps API (Part 2)

Building a Store Locator ASP.NET Application Using Google Maps API (Part 3)

0

Bằng cách sử dụng GuigleAPI nuget bạn chỉ có thể làm:

GoogleGeocodingAPI.GoogleAPIKey = "YOUR API KEY"; 
var result = await GoogleGeocodingAPI.GetCoordinatesFromAddressAsync("100 Market St, Southbank"); 
var latitude = result.Item1; 
var longitude = result.Item2; 

Chỉ cần cài đặt nó với lệnh NuGet Install-Package Easyforce.GuigleAPI và bạn tốt với đi.

Kiểm tra câu trả lời này để biết thêm chi tiết: https://stackoverflow.com/a/44484010/1550202

Các vấn đề liên quan