Bing Maps SOAP Service, Search Service

23 Tem

Bing Maps SOAP servisleriyle .Net uygulaması geliştirmek başlıklı yazımızın devamı niteliğinde olan bu yazıda da bir başka SOAP servisi olan Search Servisini  incelemeye çalışacağız.

Servisin, uygulamaya nasıl dahil edileceğini bir önceki  Geoscodes service yazısında incelemiştik. Aynı süreci işleterek uygulamaya servisi eklemek mümkündür. Bu yazıda da servisin amacından bahsetmeye çalıştım.

Search service kullanarak bir yerde bulmak istediğimiz şeyleri arayabiliriz. Örneğin bir şehirdeki hastane, postane, sushi, hamburger gibi aramaları yapmak mümkündür.

Kodda düzenleme (refactoring) yapılmamış olması, kodun okunabilirliğini biraz zora sokmuş olabilir. Aceleden dolayı kod bu şeklide kaldı.

Arama işlemlerini bir class üzerinden yürütmeye çalışalım. Arama sorgusu, Keyword ve Location şeklinde parametrelere göre oluşturulmaktadır.

Arama kriterini keyword ve location kelimelerini, noktalı virgülle ayırarak yapabiliriz.

Örneğin: “hospital;london” şeklinde hastaneleri aramak.


public class Search
{

    public string SearchKeywordLocation(string keywordLocation)
    {

       String results = "";
       String key = AppConfig.BingKey;

       SearchRequest searchRequest = new SearchRequest();
       searchRequest.Credentials = new Credentials();
       searchRequest.Credentials.ApplicationId = key;

       StructuredSearchQuery ssQuery = new StructuredSearchQuery();

       string[] parts = keywordLocation.Split(';');
       ssQuery.Keyword = parts[0];
       ssQuery.Location = parts[1];
       searchRequest.StructuredQuery = ssQuery;

       searchRequest.SearchOptions = new SearchOptions();

       searchRequest.SearchOptions.Filters =

       new FilterExpression()
       {
          PropertyId = 3,
          CompareOperator = CompareOperator.GreaterThanOrEquals,
          FilterValue = 8.16
       };

       SearchServiceClient searchService = new SearchServiceClient();
       SearchResponse searchResponse = searchService.Search(searchRequest);

       if (searchResponse.ResultSets[0].Results.Length > 0)
       {
           StringBuilder resultList = new StringBuilder("");

           for (int i = 0; i < searchResponse.ResultSets[0].Results.Length; i++)
           {
              resultList.Append(String.Format("{0}. {1}\n", i + 1,
              searchResponse.ResultSets[0].Results[i].Name));
           }

          results = resultList.ToString();

      }
      else
          results = "No results found";

      return results;

   }

}

Arama kriterini böldüğümüz yer şurası:


StructuredSearchQuery ssQuery = new StructuredSearchQuery();
string[] parts = keywordLocation.Split(';');
ssQuery.Keyword = parts[0];
ssQuery.Location = parts[1];
searchRequest.StructuredQuery = ssQuery;

Servisi çalıştırdığımızda is sonucu şu şekilde alabiliriz.

Londra’daki hastaneleri bu şeklide listeleyebiliyoruz.

Bing Maps SOAP Service, Geocode Service

22 Tem

Bir önceki yazımızda Bing Maps SOAP servislerini incelemeye başlamıştık. Bu yazımızda da yer bulucu servis olan Geococe servisini inceleyeceğiz.

Bu servis sayesinde verilen bir yerin coğrafi konumunu elde etmek mümkündür. Coğrafi konumu elimizde olan bir yerin de adres bilgisini elde etek mümkündür. Servisin sağladığı iki metod bu işlemleri yerine getirir.

Şimdi bir adrese ait coğrafi konum bilgisini bir örnek yardımıyla elde etmeye çalışalım.

Öncelikle elimizde bir Bing Maps Developmet Account Key olması gerekir. Bu key https://www.bingmapsportal.com ‘dan elde edilebilir. Bu key kodlama sırasında bize gerekecektir.

Servisin kullanılabilmesi için projemize eklenmesi gerekmektedir. Bu işlem için projemize sağ tıklayıp Add Service Reference diyoruz. Karşımıza çıkan pencereye aşağıdaki servis linkini yapıştırıyoruz.

http://dev.virtualearth.net/webservices/v1/geocodeservice/geocodeservice.svc?wsdl

Servisimiz Yukarıda bahsettiğimiz gibi iki adet metod içermektedir.

Bu örnekte Geocode metodunu kullanacağız.


public Location CalculateGeocodeOf(string address)
{
       GeocodeRequest geocodeRequest = new GeocodeRequest();
       geocodeRequest.Credentials = getCredentials();
       geocodeRequest.Query = address;
       geocodeRequest.Options = getGeocodeOptions();

       GeocodeServiceClient geocodeService = new GeocodeServiceClient();
       GeocodeResponse geocodeResponse = geocodeService.Geocode(geocodeRequest);

       if (geocodeResponse.Results.Length > 0)
       {
           var location = new Location();
           location.Latitude =  geocodeResponse.Results[0].Locations[0].Latitude;
           location.Longitude = geocodeResponse.Results[0].Locations[0].Longitude;

           return location;
       }

       return null;
}

private GeocodeOptions getGeocodeOptions()
{
    GeocodeOptions geocodeOptions = new GeocodeOptions();
    geocodeOptions.Filters = getConfidenceFilter();

    return geocodeOptions;
}

private ConfidenceFilter[] getConfidenceFilter()
{
    ConfidenceFilter[] filters = new ConfidenceFilter[1];
    filters[0] = new ConfidenceFilter();
    filters[0].MinimumConfidence = Confidence.High;

    return filters;
}

private Credentials getCredentials()
{
     Credentials credential = new Credentials();
     credential.ApplicationId = AppConfig.BingKey;

     return credential;
}

Hazırladığımız CalculateGeocodeOf metodu yardımıyla bir adresin coğrafi konumunu elde edebiliriz.

Bunu bing map üzerinden de doğrulayabiliriz.

Bing Maps SOAP Servisleriyle .Net Uygulaması Geliştirmek

20 Tem

Bing Maps, AJAX destekli uygulamaların sağlamanın yanında bir de desktop uygulamalarda kullanılmak üzere geliştirdiği SOAP servislerini de hizmete sunmaktadır. SOAP servisleri birer WCF (Windows Presentation Foundation) uygulamasıdır. Bu yönüyle WCF servislerini kullanmış olanlara büyük olanak sağlamaktadır.

Bing Maps SOAP servisleriyle, Visual Studio üzerinde uygulama geliştirmek için öncelikle Bing Map Platform Developer Account oluşturmak gerekmektedir. Bing Maps Account Center üzerinden hesap oluşturmak mümkündür. Oluşturulan hesap üzerinden development amacıyla bir application key üreterek uygulamalarda kullanabilirsiniz.

Bing Maps SOAP Servisleri

GeocodeService : http://dev.virtualearth.net/webservices/v1/geocodeservice/geocodeservice.svc?wsdl

SearchService    : http://dev.virtualearth.net/webservices/v1/searchservice/searchservice.svc?wsdl

ImageryService : http://dev.virtualearth.net/webservices/v1/imageryservice/imageryservice.svc?wsdl

RouteService      : http://dev.virtualearth.net/webservices/v1/routeservice/routeservice.svc?wsdl

Geocode Service

Bu servis, coğrafi konumları adreslere dönüştürmek veya adresleri coğrafi konumlara dönüştürmek için kullanılır.

Örneğin: İzmit, Kocaeli adresinin Latitude ve Longitude değerlerini verir. Ya da Latitude ve Longitude değerleri verilen bir coğrafi konumun adres bilgisini üsküdar, istanbul şeklinde verir.

Search Service

Bu servis, “ne/nerede” şeklindeki aramaların sonucunu döndüren tek bir metod sunar. Örneğin Colarado’da pizza yemek istiyorsunuz. “pizza;co” şeklinde bir arama yaptığımızda bize Colarado’da pizza yapan restoranların listesini döndürecektir.

Imagery Service

Bu servis, iki metod barındırmaktadır. İlk metod harita görüntülerinin alınmasını sağlar. Diğer metod ise ilgili resmin metadata bilgisinin alınmasını sağlar.

Route Service

Bu servis, iki nokta arasındaki rotanın hesaplanmasını sağlar. Bu hesaplamayı başlangıç noktasından varış noktasına doğru ana yönleri noktasal şeklide belirleyerek yapar.

Örneğin; A noktası, 1km sonra Sola dön, 2km sonra sağa dön şeklinde.

Bu servisleri, fırsat buldukça uygulamalarla incelemeye devam edeceğiz.