2012-05-05 33 views
7

Estoy planeando utilizar Google Places API para crear una dirección de autocompletar en mi sitio web. Mi pregunta es si mis requisitos son posibles usando Google Places.Google Places API: busque una dirección con la ciudad

Tengo una página "Publicar solicitud" donde el usuario publica una dirección (ciudad, calle y número de casa). También tengo una página de "Búsqueda" en la que el usuario puede buscar publicaciones según la ciudad. Aquí el usuario solo inserta el nombre de una ciudad, sin un número de calle y casa.

Mis preguntas:

  1. ¿Puedo obligar al usuario a insertar una ciudad, calle y número de casa (inserciones de la única ciudad o única ciudad y de la calle, por ejemplo, alertarán de entrada no válida, o la función de autocompletar volverán solo resultados del número de la ciudad, la calle y la casa)?

  2. ¿Puedo forzar al usuario a insertar ciudad solamente (sin calle y número de casa)?

  3. Suponiendo que el usuario publique una dirección con "MyCity, MyStreet 12". En el fondo de la aplicación, obtengo una identificación de esta ubicación específica y la almaceno. Otro usuario está buscando publicaciones e inserta "MyCity". En el fondo, obtengo la identificación específica de "MyCity" y uso esta identificación para buscar en mi db. ¿Cómo puedo encontrar el resultado del primer usuario: "MyCity, MyStreet 12" con la tecla "MyCity"?
    En otras palabras, supongamos que tengo una identificación de ubicación que representa una ciudad y otra identificación de ubicación que representa la dirección completa (ciudad, calle, número de casa). ¿Cómo puedo verificar si la dirección completa pertenece a la ciudad solo con los identificadores?

Respuesta

10

En cuanto a lo que escribe el usuario en el cuadro de entrada que está asociado con Autocompletedev-guide, no hay mucho que pueda hacer para controlar lo que escriben. Sin embargo, cuando configura el Autocompleteapi-doc, puede definir opciones que controlan los resultados que volverán. La clave para usted será configurar la opción types correctamente.

específica a su pregunta # 1, puede restringir los resultados que vendrán de vuelta en el Autocomplete a direcciones mediante el establecimiento de types-geocode como se muestra en este ejemplo:

var defaultBounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(-33.8902, 151.1759), 
    new google.maps.LatLng(-33.8474, 151.2631)); 

var input = document.getElementById('searchTextField'); 
var options = { 
    bounds: defaultBounds, 
    types: ['geocode'] 
}; 

autocomplete = new google.maps.places.Autocomplete(input, options); 

específica a su pregunta # 2, puede restringir los resultados que vuelven a aparecer en el Autocomplete a las ciudades mediante el establecimiento de types a cities como se muestra aquí:

var input = document.getElementById('searchTextField'); 
var options = { 
    types: ['(cities)'], 
    componentRestrictions: {country: 'fr'} 
}; 

autocomplete = new google.maps.places.Autocomplete(input, options); 

Observe también que debido a que el Autocomplete se ha restringido a (cities), he añadido un especificador componentRestrictions para establecer el país en el que la búsqueda de ciudades (en este caso, Francia) y se retira el especificador bounds.

específica a su pregunta # 3, puede crear dos tablas, una para almacenar City de datos, y el otro para almacenar Dirección de datos, como se muestra en el siguiente diagrama UML:

enter image description here

base a la descripción en su pregunta, hay algunos aspectos clave de este diseño:

  • Existe una relación de uno a varios desde City hasta Address. Esto le permitirá asociar muchos registros Address a un único registro City. También hará que sea sencillo recuperar todos los registros Address que se hayan ingresado para cualquier City.
  • La relación entre Address y City dice que para cada Address, debe existir un City. Esto significa que cuando un usuario ingresa un Address, debe realizar las siguientes acciones: 1 - Verifique si el City para el Address ya existe en la base de datos. 2 - Si el Cityexiste existe, recupere su ID y utilícelo como el valor de la clave foránea City-ID cuando almacene el nuevo Address. 3 - Si el Cityno existe existe, se debe crear un nuevo ID único para el City y el City en la base de datos. Entonces el ID para el City se puede utilizar como el valor de la clave externa City-ID al almacenar el Address. Asegurándose de que cada Address tenga asociado City responde una de las preguntas que hace como parte de su pregunta n. ° 3: ¿Cómo puedo encontrar el resultado del primer usuario: "MyCity, MyStreet 12" usando la tecla "MyCity"? Porque cuando almacenó el registro "MyCity, MyStreet 12" Adress, se aseguró de que exista un registro "MyCity" en la tabla City. Recuperar el ID para el City es sencillo si otro usuario ingresa el mismo City o Address asociado con el mismo City ingresado por un usuario en el futuro.
  • La relación entre City y Address dice que para cualquier City puede haber cero o más registros Address asociados. Esto garantiza que el usuario en su descripción que busca solo un City puede almacenar el City incluso si no se realizan búsquedas de seguimiento Address. Se almacena el City, tiene un ID, y está esperando los nuevos registros Address que pueden agregarse más tarde.

Por último, se pedirá una pregunta más como parte de la pregunta # 3: ¿Cómo puedo comprobar si la dirección totalmente pertenecen a la ciudad utilizando sólo los identificadores? Ser capaz de responder a esta pregunta es por qué hay una clave externa City-ID que forma parte de cada registro Address. Define claramente el City que está asociado con cualquier Address. Así que si usted tiene la ID para un City y la ID para una Address, la forma más sencilla de determinar si son un partido es: 1 - Recuperar el Address de la base de datos utilizando la AddressID. 2 - Compare el valor City-ID que forma parte del Address que acaba de recuperar de la base de datos con el ID para el City con el que comenzó; si coinciden, usted sabe que el Address está asociado con el City y si no coinciden, puede estar seguro de que no existe relación entre ese Address y City.

No estoy del todo seguro de lo que está tratando de lograr con las direcciones y las ciudades, pero he tratado de darle una solución sólida que cubra las cosas que describe en su pregunta. Incluí una gran cantidad de detalles para que se aborden todos sus puntos y con la esperanza de que mi descripción sea clara y fácil de entender. Espero que esto le ayuda -

+0

Agregué una aclaración. ¿Está claro ahora? Gracias – Naor

+0

Sí, la aclaración adicional ayuda mucho. He agregado más contenido a mi respuesta original en función de su aclaración adicional. –

+0

Su answear es excelente, excepto que esperaba conseguir una lista de calles de google para poder usar Autocompletar para las calles. Gracias por la creatividad :) – Naor

0

Esto es más una pregunta de Javascript que Google Places.

Utilice una rutina de Javascript para validar el formulario y, por ejemplo, en el caso n. ° 1, comprueba que se hayan completado todos los campos. Por otro lado, para el caso n. ° 2, puede deshabilitar/eliminar los campos que no desea que se llenen y publicar la solicitud con solo lo que desea enviar.

Para el n. ° 3, solo se trata de almacenar en caché. Use localStorage, o una matriz, para almacenar la ciudad como clave y el resultado como valor.

+0

Creo que no entendiste mi pregunta. – Naor

+0

Entonces creo que será mejor que lo vuelvas a expresar. – dda

+0

Lo siento pero no puedo ver qué puedo mejorar. Sean Mickey me entendió, maby deberías preguntarle. – Naor

0

lugares de Google le ayudará a su usuario autocompletar su dirección como Sean Mickey describe:

  1. Comienzan a escribir su dirección de la calle en un solo campo
  2. Google les da una lista de una posible coincidencia de direcciones
  3. recogen uno, y te devuelven una respuesta like this

El id en esa respuesta va a ser para su dirección, no para la ciudad. Por lo tanto, no va a ser útil de la manera que desee. Si desea hacer coincidir en ciudad, debe almacenar el nombre de la ciudad (si lo desea, puede crear su propia tabla de identificación).

pensar en cómo desea implementar la búsqueda área en su base de datos:

  • Seleccione ciudad (no encuentra personas que viven en las afueras de los límites de la ciudad)
  • Búsqueda por distancia (encuentra todos dentro de un radio determinado)

Si elige buscar por distancia, también debe almacenar la latitud y la longitud que Google Places le devuelve cuando el usuario ingresa su dirección. También necesita leer sobre cómo hacer spatial search en su base de datos (especialmente geodist).

Cuestiones relacionadas