Select to view content in your preferred language

# Coordinates X Y on pop up on Search Widget

669
2
01-30-2023 04:01 AM
Occasional Contributor

Hello everybody,

I would like to get X and Y on the pop up when user search a feature. I don't know if it's better to do this with Arcade expressions or with a event function.

With Arcade, I have a little problem on the script on the \$feature X.

``````<script id="X">

function MetersToLon(x) {

var originShift = 2.0 * PI * 6378137.0 / 2.0;

var lon = (x HERE THE PROBLEM / originShift) * 180.0;

return Round(lon, 3);
return MetersToLon(Round(Geometry(\$feature).X, 6));
}

</script>``````

Could someone help me on this please?

Tags (8)
1 Solution

Accepted Solutions
Occasional Contributor

I found the solution, here the code:

`````` //TEMPLATE
const template = {
// autocasts as new PopupTemplate()
title: "Arrêt N° {IDARRET} - {NOMARRET}",
lastEditInfoEnabled : false,
expressionInfos:  [
{
name: "Coord",
title: "Coordonnées XY",
expression:
`function MetersToLatLon(x, y) {
// Converts XY point from Spherical Mercator EPSG:900913 to lat/lon in WGS84 Datum
var originShift = 2.0 * PI * 6378137.0 / 2.0;

var lon = (x / originShift) * 180.0;
var lat = (y / originShift) * 180.0;

lat = 180.0 / PI * (2.0 * Atan( Exp( lat * PI / 180.0)) - PI / 2.0);
return [lat, lon];
}

var latlon = MetersToLatLon(Geometry(\$feature).X, Geometry(\$feature).Y);
//var url = CreateWazeURL(latlon[0], latlon[1]);
//return round(latlon[0],2)+"-------"+ round(latlon[1],2);
var a = 6378137; //demi grand axe de l'ellipsoide (m)
var e = 0.08181919106; //première excentricité de l'ellipsoide
var l0 = PI /180 * 3
var lc = l0
var phi0 = PI / 180 * 46.5   // latitude d origine en radian
var phi1 = PI / 180 * 44   // 1er parallele automécoïque
var phi2 = PI / 180 * 49    // 2eme parallele automécoïque

var x0 = 700000; //coordonnées à l'origine
var y0 = 6600000; //coordonnées à l'origine
var long = latlon[0]
var lat = latlon[1]
var phi = (PI / 180) * long;
var l = (PI / 180) * lat;

//calcul des grandes normales
var gN1 = a / Sqrt(1 - e * e * Sin(phi1) * Sin(phi1));
var gN2 = a / Sqrt(1 - e * e * Sin(phi2) * Sin(phi2));

//calculs des latitudes isométriques
var gl1 = Log(Tan(PI / 4 + phi1 / 2) * Pow((1 - e * Sin(phi1)) / (1 + e * Sin(phi1)), e / 2));
var gl2 = Log(Tan(PI / 4 + phi2 / 2) * Pow((1 - e * Sin(phi2)) / (1 + e * Sin(phi2)), e / 2));
var gl0 = Log(Tan(PI / 4 + phi0 / 2) * Pow((1 - e * Sin(phi0)) / (1 + e * Sin(phi0)), e / 2));
var gl = Log(Tan(PI / 4 + phi / 2) * Pow((1 - e * Sin(phi)) / (1 + e * Sin(phi)), e / 2));

//calcul de l'exposant de la projection
var n = (Log((gN2 * Cos(phi2)) / (gN1 * Cos(phi1)))) / (gl1 - gl2);//ok

//calcul de la constante de projection
var c = ((gN1 * Cos(phi1)) / n) * Exp(n * gl1);//ok
//calcul des coordonnées
var ys = y0 + c * Exp(-1 * n * gl0);

var \$x = x0 + c * Exp(-1 * n * gl) * Sin(n * (l - lc));
// var y93 = ys - c * Exp(-1 * n * gl) * Cos(n * (l - lc));
//var \$x= ((\$c*exp(-\$n*(\$lat_iso)))*sin(\$n*(latlon[0]-3)/180*PI)+\$xs);
var \$y = ys - c * Exp(-1 * n * gl) * Cos(n * (l - lc));

return round(\$x,2) +TextFormatting.NewLine+ round(\$y,2)`

} ],
content:
[
{
// It is also possible to set the fieldInfos outside of the content
// directly in the popupTemplate. If no fieldInfos is specifically set
// in the content, it defaults to whatever may be set within the popupTemplate.
type: "fields",
fieldInfos: [
{
},
{
fieldName: "VILLE",
label: "Ville",
},
{
fieldName: "MNLP_HASTUS",
label: "MNLP Hastus",
},
{
fieldName: "expression/Coord",

}
],
}
],

actions: [editPROD,editPROJ1,editPROJ2]

};``````

And on the webmap:

2 Replies
Occasional Contributor

Nobody?

I would like something like that in my pop up when user find a feature. It is possible?

Thank you

Occasional Contributor

I found the solution, here the code:

`````` //TEMPLATE
const template = {
// autocasts as new PopupTemplate()
title: "Arrêt N° {IDARRET} - {NOMARRET}",
lastEditInfoEnabled : false,
expressionInfos:  [
{
name: "Coord",
title: "Coordonnées XY",
expression:
`function MetersToLatLon(x, y) {
// Converts XY point from Spherical Mercator EPSG:900913 to lat/lon in WGS84 Datum
var originShift = 2.0 * PI * 6378137.0 / 2.0;

var lon = (x / originShift) * 180.0;
var lat = (y / originShift) * 180.0;

lat = 180.0 / PI * (2.0 * Atan( Exp( lat * PI / 180.0)) - PI / 2.0);
return [lat, lon];
}

var latlon = MetersToLatLon(Geometry(\$feature).X, Geometry(\$feature).Y);
//var url = CreateWazeURL(latlon[0], latlon[1]);
//return round(latlon[0],2)+"-------"+ round(latlon[1],2);
var a = 6378137; //demi grand axe de l'ellipsoide (m)
var e = 0.08181919106; //première excentricité de l'ellipsoide
var l0 = PI /180 * 3
var lc = l0
var phi0 = PI / 180 * 46.5   // latitude d origine en radian
var phi1 = PI / 180 * 44   // 1er parallele automécoïque
var phi2 = PI / 180 * 49    // 2eme parallele automécoïque

var x0 = 700000; //coordonnées à l'origine
var y0 = 6600000; //coordonnées à l'origine
var long = latlon[0]
var lat = latlon[1]
var phi = (PI / 180) * long;
var l = (PI / 180) * lat;

//calcul des grandes normales
var gN1 = a / Sqrt(1 - e * e * Sin(phi1) * Sin(phi1));
var gN2 = a / Sqrt(1 - e * e * Sin(phi2) * Sin(phi2));

//calculs des latitudes isométriques
var gl1 = Log(Tan(PI / 4 + phi1 / 2) * Pow((1 - e * Sin(phi1)) / (1 + e * Sin(phi1)), e / 2));
var gl2 = Log(Tan(PI / 4 + phi2 / 2) * Pow((1 - e * Sin(phi2)) / (1 + e * Sin(phi2)), e / 2));
var gl0 = Log(Tan(PI / 4 + phi0 / 2) * Pow((1 - e * Sin(phi0)) / (1 + e * Sin(phi0)), e / 2));
var gl = Log(Tan(PI / 4 + phi / 2) * Pow((1 - e * Sin(phi)) / (1 + e * Sin(phi)), e / 2));

//calcul de l'exposant de la projection
var n = (Log((gN2 * Cos(phi2)) / (gN1 * Cos(phi1)))) / (gl1 - gl2);//ok

//calcul de la constante de projection
var c = ((gN1 * Cos(phi1)) / n) * Exp(n * gl1);//ok
//calcul des coordonnées
var ys = y0 + c * Exp(-1 * n * gl0);

var \$x = x0 + c * Exp(-1 * n * gl) * Sin(n * (l - lc));
// var y93 = ys - c * Exp(-1 * n * gl) * Cos(n * (l - lc));
//var \$x= ((\$c*exp(-\$n*(\$lat_iso)))*sin(\$n*(latlon[0]-3)/180*PI)+\$xs);
var \$y = ys - c * Exp(-1 * n * gl) * Cos(n * (l - lc));

return round(\$x,2) +TextFormatting.NewLine+ round(\$y,2)`

} ],
content:
[
{
// It is also possible to set the fieldInfos outside of the content
// directly in the popupTemplate. If no fieldInfos is specifically set
// in the content, it defaults to whatever may be set within the popupTemplate.
type: "fields",
fieldInfos: [
{
},
{
fieldName: "VILLE",
label: "Ville",
},
{
fieldName: "MNLP_HASTUS",
label: "MNLP Hastus",
},
{
fieldName: "expression/Coord",

}
],