Buscador

Buscador

Nuestro nuevo e-commerce ya está al aire

Ubicaciones basadas en servicios de acceso con ArcGIS Earth

Chris Andrews, Marzo 8 de 2016


Para no dejar pasar la cumbre de Desarrolladores ESRI que se lleva acabo ahora mismo en Palm Springs, California, hablaremos acerca de una capacidad escondida de ArcGIS Earth 1.0 que permite a los desarrolladores brindar a sus usuarios finales la posibilidad de acceder a información adicional de una ubicación.

Nota: Si aún no ha descargado ArcGIS Earth, Haga clic aquí!

Si visitan la página web documentación de ArcGIS Earth, en la pestaña administración, se puede ver una entrada inocua llamada ServiceURL que indica como configurar el archivo de ArcGISEarth.exe.config que está en el directorio de instalación de ArcGIS Earth. Lo interesante de este parámetro es que permite a un administrador introducir una URL con valores codificados que contienen información de las ubicaciones y pueden ser reconocidos por la aplicación. Cuando un usuario utiliza CTRL-clic derecho en el mundo, la URL invoca latitud, longitud y altitud del punto seleccionado. Mientras la URL devuelva un KML válido, el KML se mostrará en la ventana de ArcGIS Earth.

Explorando la aplicación nos dimos cuenta que se podía añadir una llamada a What3Words de modo que consiga un lugar único de tres palabras para cualquier punto del planeta

Muchos usuarios nos piden la capacidad de vista calle como la de Google. Si bien en el momento no la tenemos, podemos integrar Google Street View en la ventana de ArcGIS Earth.

De la misma manera, podría ser capaz de llamar a Mapillary o HERE también como servicio. Hemos encontrado algunas limitaciones en el navegador embebido en ArcGIS Earth cuando llama aplicaciones JavaScript, se está investigando para dar una solución de fondo.

What3Words no exporta KML. Tampoco las nuevas API de Google StreetView. Entonces, ¿cómo pasó esto? Se requiere un poco de invención.

Estos son los pasos que se han seguido:

  1. Configurar un servidor CherryPy Server
  2. Crear un archivo template de KML simple que se pueda llamar repetidas veces, y se coloca una ubicación donde se pueda cargar con Python.
    
    <?xml version="1.0" encoding="UTF-8"?>
    <kml xmlns="http://www.opengis.net/kml/2.2" 
         xmlns:kml="http://www.opengis.net/kml/2.2">
    <Document>
    <name>%title%</name>
    <description>%lon%,%lat%</name>
     <styleUrl>#golf-balloon-style</styleUrl>
     <description><![CDATA[<img 
         src="http://www.yakjive.com/styles/
         icons/spaceship-orange.png"/>]]>%descrip
         tion2%</description>
     <LookAt>
     <longitude>%lon%</longitude>
     <latitude>%lat%</latitude>
     <altitude>%elevation%</altitude>
     <heading>0.00265562742696041</heading>
     <tilt>0</tilt>
     <range>11030676.39798315</range>
     </LookAt>
     <Point>
     <coordinates>%lon%,%lat%,%elevation%
    
    
    
    
    
    
    
                
  • Crear una aplicación cherrypy con un método que represente una llamada desde ArcGIS Earth este se utiliza para invocar el servicio deseado. En el caso de What3Words, es un método sencillo que construye un HTML en torno a la solicitud de What3Words y lo incrusta en una marca de posición KML básica. El método es el siguiente pseudocódigo:
    
    @cherrypy.expose
    def callWhat3Words(self, lon=0, lat=0, elv=0):
      cherrypy.response.headers['Content-Type']= 'text/xml'
      w3wURL = 'https://api.what3words.com/position?key={MYKEYNOTYOURS}&position=' \
         + str(lat) + ',' + str(lon)
      req = urllib.request.Request(w3wURL)
      c = urllib.request.urlopen(req)
      res = c.read()
      data = json.loads(res.decode("utf-8"))
      #Build my HTML that will be embedded in KML
      description1 = \
        '<div height=250 width=400 style="font-family:Verdana;">' + \
        '<img src="http://127.0.0.1:8585/templates/what3words_logo.png"' + \
        ' height=139 width=400/>' + \
        '<p><span style="color:blue">' + \
         data['words'][0] + ':' + \
         data['words'][1] + ':' + \
         data['words'][2] + \
        '</span>&l/p></div>'
      description2 = ''
      #Load and modify the KML template
      kmlFile = open('home/templates/response.kml', 'r')
      result = kmlFile.read() 
      result = result.replace("%lon%", str(lon)).
        replace("%lat%", str(lat)).
        replace("%elevation%", str(elv)).
        replace("%description1%", description1).
        replace("%description2%", description2).
        replace("%title%", "What3Words Test")
      return result
    
    
                  
  • Modificar el archivo ArcGISEarth.exe.config para dar formato al llamado de la URL. Aquí está el ejemplo de la llamada al comando What3Words con CherryPy:
                    
    ...
    <add key="urlwithpos" 
    value="http://127.0.0.1:8585/callWhat3Words?lon=%LONGITUDE%&lat=%LATITUDE%&elv=%ELEVATION%"
    />
    ...
    
                  
  • Reiniciar ArcGIS Earth, hacer zoom en cualquier zona, CTRL-CLIC DERECHO...y así se verá:
  • Posiblemente pueda llamar a cualquier URL que acepte las coordenadas y retorne un KML. Si publica una página web podría por ejemplo, llamar otros servicios o enlaces de datos y agregarlos en su espacio de trabajo.

    Aquí hay algunos consejos:

    • Utilice el valor de la etiqueta add con el atributo llave urlwithpos, el cual se encuentra bajo el elemento ServiceURL para activar esta función.
    • Cuando formateen la dirección URL en el archivo de configuración, el signo & necesita ser representado como&
    • %LONGITUD% - valor clave que representa la longitud del punto marcado
    • %LATITUD% - valor clave que representa la latitud del punto marcado
    • %ELEVACIÓN%- Valor clave que representa la elevación del punto seleccionado, actualmente está en metros
    • %HEADING% - En la versión de ArcGIS Earth 1.1 se agregará un valor para representar el encabezado en la vista del mapa.

    Háganos saber si estas herramientas le son de utilidad para añadir cualquier capacidad interesante a ArcGIS Earth. Próximamente lanzaremos un API o SDK y queremos saber lo que nuestros usuarios logran hacer.