0

良い一日、

ビングマップをGoogleマップAPIコードに変更する方法を知っている人はいますか? オンラインで非常に便利なコードを見つけました。これは bing マップを使用してコーディングされており、Google マップで動作するように変更したいと考えています。ここにコードが見つかった場合: http://blogs.msdn.com/b/crm/archive/2011/01/19/custom-charting-capabilities-in-microsoft-dynamics-crm-2011.aspx

以下のコード:

<html>

   <head>

   <title>Accounts on Bing Maps</title>

   <script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.3"></script> 
   <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
   <script type="text/javascript" src="ClientGlobalContext.js.aspx"></script>

<script type="text/javascript">

   var map;
   // Function to construct key-value pairs from a query string.
   function getParametersFromQuery(query) {
   var parametersDictionary = new Array();

   var parameters = query.split('&');

   for (var i = 0; i < parameters.length; i++) {

   var keyAndValue = parameters[i].split('=');

   parametersDictionary[unescape(keyAndValue[0])] = unescape(keyAndValue[1]);

   }

   return parametersDictionary;

   }

   // Function that makes a GET request to the CRM REST end-point, and invokes a callback with the results.
   function retrieveFromCrmRestApi(url, callback) {

   $.ajax({
   type: "GET",

   url: GetGlobalContext().getServerUrl() + "/XRMServices/2011/OrganizationData.svc" + url,

   contentType: "application/json; charset=utf-8",

   dataType: "json",

   success: function (data) {

   callback(data.d);

   }
   });

   }


   // Function that retrieves the corresponding CRM chart, and invokes the callback when successful.
   function loadChartFromCrm(callback) {

   var parameters = getParametersFromQuery(window.location.search.substring(1));
   parameters = getParametersFromQuery(parameters["data"]);

   var id = parameters["visid"].substr(1, 36);

   var type = parameters["vistype"];

   var url = (type == "1111" ? "/SavedQueryVisualizationSet" : "/UserQueryVisualizationSet")

    + "(guid'" + id + "')?$select=DataDescription,PresentationDescription";
   retrieveFromCrmRestApi(url, callback);

   }



   var locations = new Array();
   function plotAccountLocations(accounts) {
   if (accounts.length > 0) {

   var account = accounts.pop();

   var address = account.Address1_City + ', ' + account.Address1_Country;

   map.Find(null, address, null, null, 0, 1, false, false, false, false,

   function (shapeLayer, results, places, moreResults, error) {

   if (null != places && places.length > 0) {

   var place = places[0];

   var newShape = new VEShape(VEShapeType.Pushpin, place.LatLong);

   newShape.SetTitle(account.Name);

   newShape.SetDescription(address);

   locations.push(newShape);
   }

   // When we have found (or not found) the current account,

   // recursively call the same function to find the next one.

   plotAccountLocations(accounts);

   });

   }

   else {

   var shapeLayer = new VEShapeLayer();

   map.AddShapeLayer(shapeLayer);

   shapeLayer.AddShape(locations);

   }

   }



   function loadAccountsFromCrm(dataDescription) {

   var url = "/AccountSet?$select=Address1_Country,Address1_City,Name";

   if (null != dataDescription) {

   // Filter accounts based on country specified in data description.

   url += "&$filter=Address1_Country eq '" + dataDescription + "'";

   }

   retrieveFromCrmRestApi(url,

   function (data) {

   var results = data["results"];

   var accounts = new Array();

   for (resultKey in results) {

   accounts.push(results[resultKey]);

   }

   // Once accounts are retrieved from CRM Server, plot their locations on map.

   plotAccountLocations(accounts);

   }
   );
   }



   function getMap(presentationDescription) {

   // Set center and zoom defaults.

   var center = null;

   var zoom = 4;

   if (null != presentationDescription) {

   // Calculate map-center and zoom from the presentation description.

   var arguments = presentationDescription.split(',');

   if (arguments.length > 1) {

   center = new VELatLong(arguments[0], arguments[1]);

   }

   if (arguments.length > 2) {

   zoom = arguments[2];

   }

   }

   map = new VEMap("map");

   map.LoadMap(center, zoom, VEMapStyle.Road, true, VEMapMode.Mode2D, false, 0);

window.onresize = function (event) { map.Resize(document.body.clientWidth, document.body.clientHeight); };

   window.onresize(null);

   }



   function loadMap() {

   // First, get the chart object from CRM Server.

   loadChartFromCrm(
   function (chart) {

   // Once we have retrieved the chart, format the map based on the chart's presentation description.

   getMap(chart.PresentationDescription);

   // Get Accounts from CRM Server based on the chart's data description, and plot them on the map.

   loadAccountsFromCrm(chart.DataDescription);

   }

   );

   }

   </script>

   </head>

   <body onload="loadMap()">

   <div id="map"></div>

   </body>

   </html>
4

1 に答える 1

0

あなたが探しているものに対して、すぐに使える簡単なソリューションはありません。

Google API には多くの違いがあります。たとえば、Google API はマップの子の追跡をプログラマー (ユーザー) に任せます。Bing API の場合のように、マップ コントロールをループする手段はありません。これは、マップ コンテンツを保存して再表示するためのソリューションが少し異なることを意味します。

ただし、どちらの API も JavaScript を介して実行されるため、ドキュメントに従って機能を変換するだけで済みます。

于 2013-08-30T20:53:48.037 に答える