2017-03-06 9 views
1

UWP 맵을 클릭하는 등 다양한 방법을 사용하여지도에 경유지를 추가하여 경로를 계획 할 수있는지도 컨트롤을 사용하여 UWP 앱을 개발 중입니다. 제어. 사용자가 웨이 포인트 또는 위치를 추가 할 수있게하려는 방법 중 하나는 실제 주소로 검색하는 것입니다. 아래의 BING 맵 REST 서비스 코드를 사용합니다. 그러나 앱을 현재 사용중인 언어와 문화를 제공하지 않으면 미국이 아닌 사용자에게 명확하게 사용되지 않는 미국 주소가 먼저 반환됩니다 (예 Microsoft 실제로 우리는 미국 밖에서 살고 있습니다 - 충격, 공포)! 호주에 대해 "en-AU"와 같은 언어 문화 문자열을 제공하면 먼저 호주 주소를 검색하게되며 이것이 실제로 잘 작동한다는 것을 발견했습니다. 장치의 지역 설정에서 NOT :W10 장치의 현재 국가의 문화와 언어를 사용하여 주소 조회 수행

public async Task<List<WayPoint>> FindAddress(string address) 
    { 
     List<WayPoint> matchingWaypoints = new List<WayPoint>(); 

     //Create a Geocode request to submit to the BING Maps REST service. 
     var request = new GeocodeRequest() 
     { 
      Query = address.Trim(), 
      Culture = "en-AU", //HOW CAN I GET THIS FROM THE DEVICE'S CURRENT LOCATION??? 
      IncludeIso2 = true, 
      IncludeNeighborhood = true, 
      MaxResults = 10, 
      BingMapsKey = MapServiceToken 
     }; 

     //Process the request by using the BING Maps REST services. 
     var response = await ServiceManager.GetResponseAsync(request); 

     if (response != null && 
      response.ResourceSets != null && 
      response.ResourceSets.Length > 0 && 
      response.ResourceSets[0].Resources != null && 
      response.ResourceSets[0].Resources.Length > 0) 
     { 
      int wpNumber = 0; 
      foreach (BingMapsRESTToolkit.Location loc in response.ResourceSets[0].Resources) 
       matchingWaypoints.Add(new WayPoint(wpNumber++, loc.Address.FormattedAddress, loc.Point.Coordinates[0], loc.Point.Coordinates[1]));    
     } 

     return matchingWaypoints; 
    } 

그래서 내가 분명히하고 싶은 장치의 현재 위치를 기반으로이 문자열을 (국가 즉)를 도출한다. 예를 들어, 누군가가 앱을 사용하고 있다면, 나는 en-US를 지정하려고합니다. 뉴질랜드에 있다면 en-NZ가 될 것이고, 프랑스에서는 "fr-FR"이 될 것입니다. 내가 할 수 있니? 내가 현지화에 대해 읽은 모든 것들은 장치 설정을 현재 물리적 위치가 아니라 사용하므로 여전히 어떻게해야 하는지를 알아 내려고 노력하고 있습니다. 사람이 도울 수 있다면

나는 위도와 경도를 반환합니다 https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/Geolocation

이에서 위치를 확인하는 방법에 대한 공식 샘플이 있습니다

답변

1

:-) 그것을 감사 정말 것입니다. 그런 다음 다른 Bing API to get the country based on that lat/long을 사용할 수 있습니다.

국가 이름이 표시됩니다. 이를 통해 미리 생성 된 국가 이름에 대한 코드 목록 (컴퓨터에서 CultureInfo.GetCultures()으로 생성)을 조회하거나 이 UWP에서 지원되지 않으므로 this을 런타임시에 볼 수 있습니다.

지역 설정을 사용하는 것이 더 간단하지만 실제 위치를 사용하려면이 방법을 사용하십시오. 위치에 액세스 할 수없는 장치의 경우 국가 별 설정이 양호한 백업 일 수 있습니다.

또 다른 접근 방법은 IP 주소를 기반으로 한 위치와 같은 정보를 제공하는 다양한 공개 API 중 하나입니다. 다른 국가의 프록시를 사용했기 때문에 이것도 완벽하지는 않습니다.

0

답장을 보내 주셔서 감사합니다.하지만 Bing Maps 포럼의 도움을 받아 작업을 수행했습니다. REST API를 사용하는 대신 UWP Map API의 일부로 FindLocationsAsync 호출을 사용하여 주소를 전달하고 로컬 지오 포인 트는 시작 참조 (일명 '힌트'위치)와 최대 일치 항목 수를 반환합니다. 여기에 완벽하게 작동하는 코드가 있습니다. WayPoint는 내 모델에서 경로상의 웨이 포인트에 대한 다양한 정보를 저장하는 객체입니다.)

public async Task<List<WayPoint>> FindAddress(string address) 
    { 
     List<WayPoint> matchingWaypoints = new List<WayPoint>(); 

     // Use current location as a query hint so nearest addresses are returned. 
     BasicGeoposition queryHint = new BasicGeoposition(); 
     queryHint.Latitude = this.CurrentLocation.Position.Latitude; 
     queryHint.Longitude = this.CurrentLocation.Position.Longitude; 
     Geopoint hintPoint = new Geopoint(queryHint); 

     MapLocationFinderResult result = 
      await MapLocationFinder.FindLocationsAsync(address.Trim(), hintPoint, 5); 

     // If the query returns results, store in collection of WayPoint objects. 
     string addresses = ""; 
     if (result.Status == MapLocationFinderStatus.Success) 
     { 
      int i = 0; 
      foreach (MapLocation res in result.Locations) 
      { 
       matchingWaypoints.Add(new WayPoint(i++, res.Address.FormattedAddress, res.Point.Position.Latitude, res.Point.Position.Longitude)); 
      } 
     } 
     return matchingWaypoints; 
    } 
+0

이것은 사용자가 물어 본 것과 정확히 일치하지 않습니다. UWP Finder API는 항상 OS 표시 언어를 사용하여 검색합니다. OS 디스플레이 언어는 사용자가 현재 요청한 국가의 언어와 일치하지 않을 수 있습니다. –

+0

Duncan에게 감사 드려요.하지만 제 원래 게시물을 다시 읽어야 할 필요가 있다고 생각합니다. 나는 현지 언어로 결과를 요구하지 않았다. 내가 원했던 것은 문화와 언어 문자열로 검색을 할 수 있었기 때문에 미국 주소가 아닌 지역/국가에 대한 결과가 먼저 나왔다. 사실 FindLocationsAsync는 내가 묻는 것을 정확히 * 수행합니다. – nzmike