2015-12-12 6 views
0

Я разрабатываю веб-сайт, который должен был бы использовать API Google для адресов, геолокации и, возможно, геообработки.Лучший способ поиска адреса на картах Google

Это то, что проблематично для меня.

-Устройства регистрируются на веб-сайте и говорят, что он будет работать в местоположении А и в 5 км от этого места. -Конкурс выполняет поиск на сайте, чтобы узнать, может ли он найти кого-то в местоположении B. Теперь это место B может упасть в радиус 5 км вокруг местоположения A, а затем снова это не нужно.

Проблема очевидна. Как я узнаю, что местоположение B находится в радиусе 5 км от места A?

Теперь, давайте немного приправить его.

enter image description here

Так что теперь у нас есть несколько пользователей, каждый из которых имеет свой собственный уникальный радиус работы. Только пользователи A, B и C могут работать там, где мы искали. Пользователь D не может!

Что было бы лучшим способом достичь этого?

Это была бы информация, которая у меня была бы. -Все места пользователей и их радиус работы. -Здесь мы ищем.

Я ищу абстрактное решение здесь и, возможно, для ссылок на какие-то учебники, которые были бы близки к тому, что я прошу здесь.

Если у меня есть неправильные теги для этого вопроса, пожалуйста, скажите мне, чтобы я мог их исправить. Вы должны простить меня, но я новичок в этой проблематике.

+0

Возможно, я понимаю вопрос неправильно, но все, что вам нужно сделать, это рассчитать расстояние между местоположением пользователя и рабочим местом. Когда он меньше радиуса, который пользователь хочет работать там –

+0

Да, но это заставило бы меня пройти через все мои адреса и проверить каждый из них, если они могут работать на выбранном пользователем адресе. Есть ли способ загрузить все эти адреса в google и сообщить Google, что этот адрес предоставляет что-то в определенном радиусе? – Rob

ответ

0

Так что мне удалось найти решение, где я не делаю расчет, а скорее полагаюсь на базу данных. Поскольку это SQL Server (я не знаю, доступно ли это для других поставщиков баз данных), я использую тип данных, называемый географией.

я могу создать таблицу таким образом

USE [Test] 
GO 
/****** Object: Table [dbo].[Address] Script Date: 19.2.2016. 13:10:15 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE TABLE [dbo].[Address](
[ID] [int] IDENTITY(1,1) NOT NULL, 
[Location] [geography] NOT NULL, 
[Radius] [decimal](7, 2) NOT NULL, 
CONSTRAINT [PK_Adresa] PRIMARY KEY CLUSTERED 
(
[ID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 
GO 

Чем я могу вставить какое-то значение в таблице, как этот

INSERT INTO Address(Location, Radius) 
VALUES(geography::Point(43.0026805, 17.2788935, 4326), 2); 

После этого приходит запрашивание таблицы. Теперь, прежде чем я сделаю запрос, мне потребуется инициализировать тип географии данных. Это будет примером того, как запросить эту таблицу

GO 
DECLARE @p GEOGRAPHY = geography::Point(42.9945355, 17.2634869, 4326) 
SELECT *, Location.STBuffer(Radius * 1000).STIntersects(@p) as Valid 
FROM Address 

Это лучший soulution я могу придумать. Я считаю, что это быстрее, чем вручную выполнять математические операции, хотя я не вижу способа, которым база данных будет избегать этих операций. Единственное отличие здесь состоит в том, что я могу поместить пространственный индекс в тип данных географии, который обеспечит более быстрое выполнение.

Смежные вопросы