1 (edited by agatlogic101 2018-11-16 06:11:30)

Topic: Карты гугл

1)Гугл вроде как сменил ценовую политику по поводу своих карт и теперь карты отображаются некорректно
https://d.radikal.ru/d08/1811/52/7f50f4aa2358.png
Это как то устраняется?


2)и второй вопрос по картам. Есть таблица с календарём. И при выделении определённой даты, выпадают определённые события на эту дату. Можно ли как то сделать что бы на карте были сразу все эти точки? Потому как отдельно для каждого события посмотреть через открытия формы можно. А все сразу как? (естественно в у каждого города есть данные по его координатам в таблице)
https://b.radikal.ru/b30/1811/d5/5b8fcff42a6d.png

Re: Карты гугл

1. Теперь необходимо получать API ключ для карт, затем ввести его в свойство компонента APIKey


2. В данной теме можете найти пример, как наносить на карту маркеры http://myvisualdatabase.com/forum/viewtopic.php?id=4238

Dmitry.

3 (edited by agatlogic101 2018-11-16 13:28:20)

Re: Карты гугл

Да, этот пример похож на мой, но как вместо региона сделать дату? Ведь сам принцип в том что бы видеть все маркеры именно на определённую дату. А понимания группы или региона у меня вообще нет, так как всё завязано именно на дате

Re: Карты гугл

Пожалуйста приложите ваш проект (zip файл без exe и dll), постараюсь помочь.

Dmitry.

Re: Карты гугл

Можете назвать свою почту? Или прислать любое письмо на agatlogic101@gmail.com И я вам вышлю туда образец

Re: Карты гугл

support@drive-software.com

Dmitry.

7 (edited by agatlogic101 2019-02-18 17:22:28)

Re: Карты гугл

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

Post's attachments

Attachment icon на форум.rar 295.08 kb, 326 downloads since 2019-02-18 

Re: Карты гугл

agatlogic101 wrote:

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

Готово.

Post's attachments

Attachment icon на форум_fixed.zip 6.88 kb, 331 downloads since 2019-02-20 

Dmitry.

Re: Карты гугл

Благодарю! Очень ждал этого)

Re: Карты гугл

А что нужно поменять что бы скрипт заработал на MySQL?

procedure data_Button2_OnAfterClick (Sender: TObject);
var
    Results: TDataSet;
    lat, lng: Double;
    Marker: TMarker;
begin
    data.Map1.Markers.Clear;

    SQLQuery('SELECT latitude, longitude, name FROM tabl WHERE Date("tabl"."дата") = Date('+data.MonthCalendar1.sqlValue +')', Results);

    while not Results.Eof do
    begin                             

        lat := Results.FieldByName('latitude').asFloat;
        lng := Results.FieldByName('longitude').asFloat;
        Marker := data.Map1.Markers.Add(lat, lng);
        Marker.MapLabel.Text := '<b>'+Results.FieldByName('name').AsString+'</b>';
        Marker.MapLabel.OffsetTop := -15;
        Results.Next;
        data.Caption := FloatToStr(lat);
    end;

    data.Map1.MapZoomTo(data.Map1.Markers.Bounds);
    Results.Free;
end;

begin

end.

Re: Карты гугл

Попрбоуйте так, если не заработает, приложите пожалуйста ваш проект

procedure data_Button2_OnAfterClick (Sender: TObject);
var
    Results: TDataSet;
    lat, lng: Double;
    Marker: TMarker;
begin
    data.Map1.Markers.Clear;

    SQLQuery('SELECT latitude, longitude, name FROM tabl WHERE Date(`tabl`.`дата`) = Date('+data.MonthCalendar1.sqlValue +')', Results);

    while not Results.Eof do
    begin                              

        lat := Results.FieldByName('latitude').asFloat;
        lng := Results.FieldByName('longitude').asFloat;
        Marker := data.Map1.Markers.Add(lat, lng);
        Marker.MapLabel.Text := '<b>'+Results.FieldByName('name').AsString+'</b>';
        Marker.MapLabel.OffsetTop := -15;
        Results.Next;
        data.Caption := FloatToStr(lat);
    end;

    data.Map1.MapZoomTo(data.Map1.Markers.Bounds);
    Results.Free;
end;

begin

end.
Dmitry.

12 (edited by agatlogic101 2019-04-03 18:23:08)

Re: Карты гугл

скрипт работает, но теперь встал вопрос как сделать так, что бы он ссылался не на дату которая в одной таблице с координатами, а на дату которая имеет связь с городом. То есть мы на город создаём праздник со связью на этот город. В городе уже есть координаты, как сделать так что бы координаты праздника на карте показывались ссылаясь на город? Но на карте оставалось и название именно города, и именно его координаты. А от праздника бы только дата для календаря учитывалась
Приложил проект с примером

Post's attachments

Attachment icon на форум_fixed.rar 295.79 kb, 346 downloads since 2019-04-03 

Re: Карты гугл

К сожалению я могу помочь только с решением конкретных технических вопросов.

Dmitry.

14 (edited by agatlogic101 2019-04-06 08:22:49)

Re: Карты гугл

Да, Дмитрий, я постараюсь формулировать свой вопрос более конкретно и технично.
Ваш скрип который вы написали работает для понятия 1 таблица базы данных с координатами, в которой есть имя и дата. И на карте отображается название, и координаты в зависимости от выбранной даты на календаре.

SELECT latitude, longitude, name FROM tabl WHERE Date(`tabl`.`дата`) = Date

А вопрос в следующем, как сделать так, что бы половина данных была из первой таблицы (координаты и название), а ДАТА со второй таблицы которая имеет связь с первой. То есть мы можем создать несколько дат на одни координаты, и в дату не нужно прописывать каждый раз координаты заново, они просто ссылаются на ID первой таблицы
Технически это возможно сделать? И если да, то как?

Re: Карты гугл

В запросе необходимо связать две таблицы с помощью LEFT OUTER JOIN

SELECT TableCoords.latitude, TableCoords.longitude, TableCoords.name FROM tableDates LEFT OUTER JOIN TableCoords ON tableDates.id_TableCoords = TableCoords.id WHERE Date(`tableDates`.`дата`) = Date
Dmitry.

Re: Карты гугл

Спасибо, работает. При показе сразу нескольких координат удобно всё видно, но когда с одной координаты он показывает очень близко, с точностью до метра, на карте. Как прописать так, что бы видеть город с далеко? И не собьёт ли этот параметр показ сразу нескольких городов?

Re: Карты гугл

agatlogic101 wrote:

Спасибо, работает. При показе сразу нескольких координат удобно всё видно, но когда с одной координаты он показывает очень близко, с точностью до метра, на карте. Как прописать так, что бы видеть город с далеко? И не собьёт ли этот параметр показ сразу нескольких городов?

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

Dmitry.

18 (edited by agatlogic101 2019-04-16 16:49:53)

Re: Карты гугл

Да, хорошо. Только это не совсем ошибка. Скорее недонастройка с моей стороны, так как я не знаю как это прописать. Смысл прост. Если в дате на календаре сразу 2 города(даты) он показывает их с масштаба десятков и сотен километров что удобно видеть для нескольких городов на карте.
data.Map1.MapZoomTo(data.Map1.Markers.Bounds);
(я так понимаю он подстраивается под маркеры и zoom выбирается автоматически
Но когда город(дата) одна, то он её смотрит с масштаба нескольких метров. А это очень не удобно определить визуально где этот город по сравнению с другими датами. И приходиться долго крутить колесо. То есть как прописать zoom для одного города, что бы он показывал его на карте с высоты когда видно сразу несколько областей, но этот бы скрипт не нарушил показ других городов, когда их несколько.

Post's attachments

Attachment icon на_форум.rar 295.85 kb, 316 downloads since 2019-04-16 

Re: Карты гугл

Попробуйте так

procedure data_Button2_OnAfterClick (Sender: TObject);
var
    Results: TDataSet;
    lat, lng: Double;
    Marker: TMarker;
begin
    data.Map1.Markers.Clear;

    SQLQuery('SELECT tabl.latitude, tabl.longitude, tabl.name FROM holidays LEFT OUTER JOIN tabl ON holidays.id_tabl = tabl.id WHERE Date(`holidays`.`дата`) = Date('+data.MonthCalendar1.sqlValue +')', Results);

    while not Results.Eof do
    begin                              
        lat := Results.FieldByName('latitude').asFloat;
        lng := Results.FieldByName('longitude').asFloat;
        Marker := data.Map1.Markers.Add(lat, lng);
        Marker.MapLabel.Text := '<b>'+Results.FieldByName('name').AsString+'</b>';
        Marker.MapLabel.OffsetTop := -15;
        Results.Next;
        data.Caption := FloatToStr(lat);
    end;

    data.Map1.MapZoomTo(data.Map1.Markers.Bounds);
    if data.Map1.Markers.Count = 1 then data.Map1.MapOptions.ZoomMap := 7; // зум если маркер только один


    Results.Free;
end;
Dmitry.

20 (edited by sts36 2020-07-22 09:02:26)

Re: Карты гугл

Добрый день, может кто подсказать как привязать карту (находится на форме 2) к кнопке сохранения что находится на другой форме (форма 1), чтобы компонент Map1 участвовал в сохранении записи на форме 1?

Так понимаю что сообщество затрудняется ответить на данный вопрос ((( Можно ли передать координаты маркера с формы 2 на форму 1 в тот же едит?