Converting geographic WGS 84 to Web Mercator 102100
Asked Answered
O

2

8

I am trying to convert geographic coordinate system to Esri Webmercator, but when I do the conversion the resulted x and y have values of 0000003232112222… and 00000012665321…. This is very odd since coordinates as those do not exist.

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

var g = new esri.geometry.Point(positions);
g = esri.geometry.geographicToWebMercator(g);
x = g.x;
y = g.y;
Odontoblast answered 14/8, 2012 at 17:22 Comment(3)
The first coordinate almost looks like a quadtree decomposition, but the second one doesn't (digits greater than 3). Maybe just coincidence.Facesaving
would assigning the spatial reference help? (developers.arcgis.com/javascript/jsapi/point-amd.html). For the line var g = new esri.geometry.Point...Idomeneus
What are the exact inputs for your x and y values being sent into the positions array? Please include the exact format and data type of these values. Ideally, include code that actually sets the hardcoded x and y values in your sample so the problem code can be executed by others.Kaleidoscope
C
1

You should try geographicToWebMercator method in esri/geometry/webMercatorUtils module.see the detailed 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 + " )");

a 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>

Hope it could help you.

Clasp answered 25/6, 2017 at 0:55 Comment(1)
I am using the AMD style of arcgis api for javascript.As for legacy style ,the main code is similar. @PavloClasp
P
0

You don't actually have to convert the latitide/longitude to add points to a basemap that's in webmercator.

You can create the Point directly using latitude/longitude (and the API will internally do the conversion from geographic to webmercator) in a few different ways. This is available since version 3.3 (January 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

Postwar answered 23/5, 2017 at 6:22 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.