Contenido

CountryPoints, paises por puntos para Google Maps

21 Oct

+ 15

Llevo un días recopilando datos y uniendo puntos geográficos para montar un fichero Javascript con todos los puntos necesarios para colorear paises en Google Maps sin necesidad de usar ficheros KML.

countrypoints

Usando de base el estandar ISO 3166-1 de codigos de paises, he montado un fichero JS de (892kb) con todos los puntos necesarios para pintar los paises sobre mapas de Google Maps usando GPolygon(). Se que es una matada, pero la velocidad de creación de poligonos es más rápido que la carga de fichero KML, aunque estos son más potentes y ofrecen más posibilidades.

Ejemplo 

    var map = null; // MAPA
    var points = [];    // Puntos pintados
    var code = "ES"; // España
    // Opciones del polígono
    var opt = {
	lineColor: "#ff0000", // Contorno del país
	lineWidth: 1, // Tamaño la línea de contorno
	lineOpacity: 1, // Opacidad de la línea de contorno
	backgroundColor: "#ff0000", // Color del fondo
	backgroundOpacity: 0.2 // Opacidad del fondo.
    };
// Función que pinta polígonos
function paintPais(code, mapa) {
	var coords = country[code].coord;
	for (var x in coords) {
		points[code] = new GPolygon(coords[x], opt.lineColor, opt.lineWidth, opt.lineOpacity, opt.backgroundColor, opt.backgroundOpacity);
		GEvent.addListener(points[code], "click", function(a){alert("PAIS: " + pais.desc);});
		mapa.addOverlay(points[code]);
	}
}

window.onload = function() {
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
	      map.setCenter(new GLatLng(0, 0), 3);
	      if (country[code]) paintPais(code, map);
      }
}

Demo

He montado un pequeño script con Google Maps para poder testearlo y ver como funciona.

¿Como usarlo?

Para poder usar el script simplemente tenemos que linkarlo en nuestro <head /&gt; justo debajo de la llamada a Google Maps.

<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key={KEY}" type="text/javascript"></script>
<script src="http://countrypoints.googlecode.com/files/countrypoints.js" type="text/javascript"></script>

Al formar parte de Google Code, delegamos en Google el tiempo de carga del fichero, y ya que es grande no nos viene mal abusar de sus servidores :D

El secreto

Si le echamos un vistazo al fichero, vemos que este está compuesto de objetos que forman parte del objeto country y que contienen los puntos necesarios para pintar los contornos de los paises.

var country = { };
country.AO:{
		desc: 'ANGOLA',
		coord: [
		[new GLatLng(-5.768556, 12.21455),...],
		[new GLatLng(-17.25483, 11.75278),...]
		]
	};
country.AW:{
	desc: 'ARUBA',
	coord: [ [new GLatLng(12.62763, -70.06007), ...]]
	};

Conociendo estos puntos simplemente tenemos que formar un GPolygon() con ellos para darle la forma deseada.

var coords = country.ES.coord;
for (var x in coords) {
  map.addOverlay(new GPolygon(coords[x], opt.lineColor, opt.lineWidth, opt.lineOpacity, opt.backgroundColor, opt.backgroundOpacity););
}

opt, es un objeto que creé para la demo y que contiene los colores y opacidades de las líneas y fondos.

Fantástico :-) simplemente fantástico, sería interesante tener esa misma información para regiones también, por ejemplo para comunidades autonómicas o provincias …

por cierto, en la demo, si seleccionas una zona del mundo, sería interesante eliminar al anterior jejeje :-)

lo dicho fantástico e increible trabajo :-)

Esta muy bueno, felicitaciones !!
Solo encontré un error. Las Falkland no son un pais, si no que con las Malvinas, pertenecientes a la República Argentina
Nuevemente felicitaciones

Se ve genial…a Egipto no lo forma bien..pero por el resto bien
Silbido: Malvinas es de Reino Unido y Falkland Islands es su nombre en ingles.

Wikipedia:
http://es.wikipedia.org/wiki/British_Overseas_Territory_of_the_Falkland_Islands

Wikipedia lo sabe casi todo..y si no lo sabe lo inventa…
:P

jajajaj

gran trabajo te has dado andre jajajja

yo soy de chile y me imagino lo que te debe haber llevado las islas del sur de mi pais jajaj

felicitaciones

Siempre lo he dicho pensado y comprobado, eres un dios y lo más bueno es que compartes tus conocimientos a todos los que no podemos,

¡Muy bueno!

A Rusia le sale un extraño cuerno poligonal ad infinitum :)

Hola,

Quisiera saber como haz llegado a trazar los mapas, has utilizado algún listado de puntos? lo has generado automáticamente?

Yo en la url he puesto un mapa de andalucia con sus provincias de forma aproximada (con KML) que cree utilizando http://mapmash.googlepages.com/ y un shape acoplado al mapa que fui trazando (guardé la pagina de mapmash al disco duro y modifique el javascript para ajustar el shape al mapa).

El fichero KML lo genero dinámicamente a partir de un fichero csv mediante PHP para mostrar las localizaciones y la verdad no es tan lento.

Pasándole parámetros a url (i, número de provincia ordenada alfabéticamente del 1 al 8, 1= Almeria, 2=Cádiz,…8=Sevilla).

Ej: Córdoba =http://www.xul.es/kml/?i=3 en el campo de búsqueda de google maps o de esta manera (url codificada):

http://maps.google.comq=http:%2F%2Fwww.xul.es%2Fkml%2F%3Fi%3D3

Si has encontrado alguna otra forma por favor coméntamela.

La última URL del post anterior está mal y sería:

Sólo Córdoba: http://maps.google.com/?q=http:%2F%2Fwww.xul.es%2Fkml%2F%3Fi%3D3

El mapa con todas las provincias remarcadas y sus localizaciones:

http://maps.google.com/?q=http:%2F%2Fwww.xul.es%2Fkml%2F

Hola, yo en su momento preparé un ejemplo parecido. En esta ocasión utilizaba el método “oficial” para dibujar y rellenar polígonos. Os dejo el link por si a alguien le sirve de utilidad:

http://www.hellogoogle.com/google_heat_maps/

Un saludo.

@Rafael J.: Exacto, yo lo hice con un fichero CSV que tenía por aquí. Era antiguo y tuve que buscar algunas de las nuevas fronteras y algunos cambios más de formato para obtener los datos más exactos posibles.

Podrías indicar de donde sacaste los datos del csv???

@Rafael J.: Ufff, pues se que los descargué de Internet hace ya meses. Eran varios CSV que al final (con reemplazar y mover columnas) pude unir en uno, lo dejé parado durante mucho tiempo y hace unas semanas me volvieron a hacer falta. Te lo miraré a ver si puedo rastrearlos, pero será un poco dificil.

Hola, no recuerdas de donde sacastes los puntos, yo iria un poco mas alla, esto se podria llegar a conseguir incluso de una localidad. Debe de haber algun tipo de bbdd publica que tenga esta información.

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.