2012-08-14 25 views
8

Próbuję przekonwertować system współrzędnych geograficznych na Esri Webmercator, ale kiedy przeprowadzę konwersję, wynikowe wartości x i y mają wartości 0000003232112222 ... i 00000012665321 .... To jest bardzo dziwne, ponieważ współrzędne nie istnieją.Konwersja geograficznego WGS 84 na Web Mercator 102100

var positions = []; 
positions.push(x, y); 

var g = new esri.geometry.Point(positions); 
g = esri.geometry.geographicToWebMercator(g); 
x = g.x; 
y = g.y; 
+0

Pierwsza współrzędna prawie wygląda jak rozkład czworoboczny, ale drugi nie (cyfry większe niż 3). Może tylko zbieg okoliczności. – John

+0

przypisze pomoc dotyczącą odniesień przestrzennych? (https://developers.arcgis.com/javascript/jsapi/point-amd.html). Dla linii var g = new esri.geometry.Point ... –

+0

Jakie są dokładne dane wejściowe dla twoich wartości x i y wysyłanych do tablicy pozycji? Podaj dokładny format i typ danych tych wartości. Najlepiej, jeśli uwzględnimy kod, który faktycznie ustawia zakodowane wartości x i y w próbce, aby kod błędu mógł zostać wykonany przez innych. – Fitz

Odpowiedz

0

Nie musisz w rzeczywistości konwertować latitide/longitude, aby dodać punkty do mapy bazowej, która jest w webmercatorze.

Możesz utworzyć punkt bezpośrednio za pomocą szerokości/długości geograficznej (a interfejs API będzie wewnętrznie wykonywał konwersję z geograficznego na webmercator) na kilka różnych sposobów. Jest to dostępne od wersji 3.3 (styczeń 2013).

var point = new Point(-98, 38); // note that longitude(x) comes before the latitude(y). 

// or as an array 
var point = new Point([-98, 38]); 

// or as an object 
var point = new Point({latitude: 38, longitude: -98}); 

https://developers.arcgis.com/javascript/3/jsapi/point-amd.html#point4

0

Należy spróbować geographicToWebMercator metodę w esri/geometry/webMercatorUtils module.see szczegółowy documentation.

 //a point in GCS_WGS_1984(wkid is 4326) 
     var point = new Point(-118.15, 33.80, new SpatialReference({ 
      wkid: 4326 
     })); 

     var pointWebMercator = webMercatorUtils.geographicToWebMercator(point); 

     alert("the point in 102100 is (" + pointWebMercator.x + "," + pointWebMercator.y + ")"); 

live demo:

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
 
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no" /> 
 
    <title>Converting geographic WGS 84 to Web Mercator 102100</title> 
 
    <link rel="stylesheet" href="https://js.arcgis.com/3.20/esri/css/esri.css"> 
 
    <style> 
 
     html, 
 
     body, 
 
     #map { 
 
      height: 100%; 
 
      margin: 0; 
 
      padding: 0; 
 
     } 
 
    </style> 
 
    <script src="https://js.arcgis.com/3.20/"></script> 
 
    <script> 
 
     var map; 
 

 
     require(["esri/map", "esri/geometry/Point", "esri/SpatialReference", "esri/geometry/webMercatorUtils", "dojo/domReady!"], function (Map, Point, SpatialReference, webMercatorUtils) { 
 
      map = new Map("map", { 
 
       basemap: "topo", //For full list of pre-defined basemaps, navigate to http://arcg.is/1JVo6Wd 
 
       center: [-122.45, 37.75], // longitude, latitude 
 
       zoom: 13 
 
      }); 
 

 
      //a point in GCS_WGS_1984(wkid is 4326) 
 
      var point = new Point(-118.15, 33.80, new SpatialReference({ 
 
       wkid: 4326 
 
      })); 
 

 
      var pointWebMercator = webMercatorUtils.geographicToWebMercator(point); 
 

 
      alert("the point in 102100 is (" + pointWebMercator.x + "," + pointWebMercator.y + ")"); 
 
     }); 
 
    </script> 
 
</head> 
 

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

 
</html>

Nadzieja to może pomóc.

+0

Używam stylu AMD dla arcgis api dla javascript.As dla starszego stylu, główny kod jest podobny. @Pavlo – YinchaoOnline