Добрый день, есть адреса города Москва (документ в Excel)
Есть google maps https://www.google.ru/maps/ Мои карты Мои места Карты Создать карты Импорт Нажимаю значок ввиде угла с кружочками (сложно сказал) обвожу точки
Называю выделенную область с точками "область 1", например
Вопрос Можно ли выкачать теперь графические данные из карты в Excel таким образом, чтобы названиям этих точек или их атрибутам присваивалось название "область 1"?
Данные выгружаются в KML формате... там название области и номеров точек нет что дальше делать, не понимаю.
Добрый день, есть адреса города Москва (документ в Excel)
Есть google maps https://www.google.ru/maps/ Мои карты Мои места Карты Создать карты Импорт Нажимаю значок ввиде угла с кружочками (сложно сказал) обвожу точки
Называю выделенную область с точками "область 1", например
Вопрос Можно ли выкачать теперь графические данные из карты в Excel таким образом, чтобы названиям этих точек или их атрибутам присваивалось название "область 1"?
Данные выгружаются в KML формате... там название области и номеров точек нет что дальше делать, не понимаю.
Да, есть... нашел... правда, сделать с ними что-то сложно... почему - то координаты точки на карте разнятся с координатами в самом kml И как - то по этой причина особо и не подтянешь ничего.
Да, есть... нашел... правда, сделать с ними что-то сложно... почему - то координаты точки на карте разнятся с координатами в самом kml И как - то по этой причина особо и не подтянешь ничего.ant6729
В KML в географических координатах, долгота и широта, можно пересчитать при желании. А собственно, по детальнее то нельзя задачу освятить? А то вы прям как с телефона инфу набираете - на буковках экономите.
В KML в географических координатах, долгота и широта, можно пересчитать при желании. А собственно, по детальнее то нельзя задачу освятить? А то вы прям как с телефона инфу набираете - на буковках экономите.anvg
Нужно, чтобы при обведении точек на карте (1, 6, 9, 15) и названии зоны я мог скачать в Excel так, чтобы к точке потом привязывался идентификатор (название) зоны...
То есть создаем слой, обводим точки Вся эта группа точек (адресов) у меня обведены и название зоны, например, "ПерваяЗона"
Нужно, чтобы при обведении точек на карте (1, 6, 9, 15) и названии зоны я мог скачать в Excel так, чтобы к точке потом привязывался идентификатор (название) зоны...
То есть создаем слой, обводим точки Вся эта группа точек (адресов) у меня обведены и название зоны, например, "ПерваяЗона"
названиям этих точек или их атрибутам присваивалось название "область 1"?
Ну, вот, по представленным данным можно уже дать какой-то ответ. У вас, видимо, точки на карте, судя по содержимому взяты из готовой базы адресов Google. Для сравнения расставленные мной точки имеют координаты [vba]
[/vba] В вашем же случае, придётся воспользоваться геокодированием, то есть по адресу получать данные о координатах точек. Считав координаты полигона в массив можно такой функцией [vba]
Код
'ФУНКЦИЯ: определение вложености точки в многоугольник, заданный своими координатами 'положение точки на линии многоугольника считается отсутствием вложености. 'xy() - массив координат углов многоугольника, где координаты 1-ой = последней. 'первый индекс массива: 1 - координата X, 2 - координата Y 'второй индекс массива: номер точки в массиве 'Xo, Yo - координаты точки иследования Function InPoligon(xy() As Double, Xo As Double, Yo As Double) As Boolean Dim dXnext As Double, dYnext As Double, Yb As Double Dim dXprev As Double, dYprev As Double, Resault As Integer Dim nextZone As Integer, prevZone As Integer, dZone As Integer, k As Integer Resault = 0 For k = LBound(xy, 2) To UBound(xy, 2) dXnext = xy(1, k) - Xo: dYnext = xy(2, k) - Yo 'проверка четверти плоскости nextZone = 0 If (dXnext >= 0) And (dYnext > 0) Then nextZone = 1 If (dXnext < 0) And (dYnext >= 0) Then nextZone = 2 If (dXnext <= 0) And (dYnext < 0) Then nextZone = 3 If (dXnext > 0) And (dYnext <= 0) Then nextZone = 4 'If nextZone = 0 Then InPoligon = -100: Exit Function - на линии If nextZone = 0 Then InPoligon = False: Exit Function ' If k > LBound(xy, 2) Then 'проверка перехода If nextZone <> prevZone Then 'переход в другую четверть dZone = nextZone - prevZone If dZone = 3 Then dZone = -1 If dZone = -3 Then dZone = 1 If (dZone = 2) Or (dZone = -2) Then 'переход через 2 четверти 'If dXnext = dXprev Then InPoligon = -100: Exit Function - на линии Yb = (dYnext * dXprev - dYprev * dXnext) / (dXprev - dXnext) 'If Yb = 0 Then InPoligon = -100: Exit Function - на линии If Yb = 0 Then InPoligon = False: Exit Function dZone = dZone * Sgn(Yb) If (prevZone = 2) Or (prevZone = 4) Then dZone = -dZone End If '(dZone = 2) Or (dZone = -2) Resault = Resault + dZone End If 'nextZone <> prevZone End If 'k > 1 dXprev = dXnext: dYprev = dYnext: prevZone = nextZone Next k If Abs(Resault) = 4 Then InPoligon = True Else InPoligon = False End If End Function 'InPoligon
[/vba]определить - лежит ли точка внутри заданного полигона и на основании этого подписывать её принадлежность тому или другому контуру. Как то так. Успехов.
Цитата
названиям этих точек или их атрибутам присваивалось название "область 1"?
Ну, вот, по представленным данным можно уже дать какой-то ответ. У вас, видимо, точки на карте, судя по содержимому взяты из готовой базы адресов Google. Для сравнения расставленные мной точки имеют координаты [vba]
[/vba] В вашем же случае, придётся воспользоваться геокодированием, то есть по адресу получать данные о координатах точек. Считав координаты полигона в массив можно такой функцией [vba]
Код
'ФУНКЦИЯ: определение вложености точки в многоугольник, заданный своими координатами 'положение точки на линии многоугольника считается отсутствием вложености. 'xy() - массив координат углов многоугольника, где координаты 1-ой = последней. 'первый индекс массива: 1 - координата X, 2 - координата Y 'второй индекс массива: номер точки в массиве 'Xo, Yo - координаты точки иследования Function InPoligon(xy() As Double, Xo As Double, Yo As Double) As Boolean Dim dXnext As Double, dYnext As Double, Yb As Double Dim dXprev As Double, dYprev As Double, Resault As Integer Dim nextZone As Integer, prevZone As Integer, dZone As Integer, k As Integer Resault = 0 For k = LBound(xy, 2) To UBound(xy, 2) dXnext = xy(1, k) - Xo: dYnext = xy(2, k) - Yo 'проверка четверти плоскости nextZone = 0 If (dXnext >= 0) And (dYnext > 0) Then nextZone = 1 If (dXnext < 0) And (dYnext >= 0) Then nextZone = 2 If (dXnext <= 0) And (dYnext < 0) Then nextZone = 3 If (dXnext > 0) And (dYnext <= 0) Then nextZone = 4 'If nextZone = 0 Then InPoligon = -100: Exit Function - на линии If nextZone = 0 Then InPoligon = False: Exit Function ' If k > LBound(xy, 2) Then 'проверка перехода If nextZone <> prevZone Then 'переход в другую четверть dZone = nextZone - prevZone If dZone = 3 Then dZone = -1 If dZone = -3 Then dZone = 1 If (dZone = 2) Or (dZone = -2) Then 'переход через 2 четверти 'If dXnext = dXprev Then InPoligon = -100: Exit Function - на линии Yb = (dYnext * dXprev - dYprev * dXnext) / (dXprev - dXnext) 'If Yb = 0 Then InPoligon = -100: Exit Function - на линии If Yb = 0 Then InPoligon = False: Exit Function dZone = dZone * Sgn(Yb) If (prevZone = 2) Or (prevZone = 4) Then dZone = -dZone End If '(dZone = 2) Or (dZone = -2) Resault = Resault + dZone End If 'nextZone <> prevZone End If 'k > 1 dXprev = dXnext: dYprev = dYnext: prevZone = nextZone Next k If Abs(Resault) = 4 Then InPoligon = True Else InPoligon = False End If End Function 'InPoligon
[/vba]определить - лежит ли точка внутри заданного полигона и на основании этого подписывать её принадлежность тому или другому контуру. Как то так. Успехов.anvg
Для меня было бы интересно, если бы я с первого раза понял)
Функцию в VBA прописал Далее в ячейке прописываю =InPolygon (37.6330233,55.7905938,0.0 37.6342463,55.7895322,0.0 37.6369929,55.7913297,0.0 37.6348257,55.7924154,0.0 37.6330233,55.7905938,0.0(1.0) ....координаты точки исследования...)
Координаты напротив адреса нужно вытягивать дополнительной функцией? Помнится.. .была на форуме функция, проставляющая координаты точки... но она слишком медленная....
Можно ли принтскрин, как функция прописывается в ячейку???
Круто, конечно....
Для меня было бы интересно, если бы я с первого раза понял)
Функцию в VBA прописал Далее в ячейке прописываю =InPolygon (37.6330233,55.7905938,0.0 37.6342463,55.7895322,0.0 37.6369929,55.7913297,0.0 37.6348257,55.7924154,0.0 37.6330233,55.7905938,0.0(1.0) ....координаты точки исследования...)
Координаты напротив адреса нужно вытягивать дополнительной функцией? Помнится.. .была на форуме функция, проставляющая координаты точки... но она слишком медленная....
Можно ли принтскрин, как функция прописывается в ячейку???ant6729
ок... получил ключ для геокодирования Адреса, допустим(я еще не пробовал и пока не понял, как конкретные нужные адреса загонять в json.... и что к чему) будут вытягиваться в json или xml....
Допустим, смогу как-то обработать эти документы с получить координаты точек в Excel
Потом, что делать...
Я в правильном направлении рассуждаю?)
И еще вопрос
ок... получил ключ для геокодирования Адреса, допустим(я еще не пробовал и пока не понял, как конкретные нужные адреса загонять в json.... и что к чему) будут вытягиваться в json или xml....
Допустим, смогу как-то обработать эти документы с получить координаты точек в Excel
Adress Google Yandex Москва, проспект Мира, 71 55.7880540, 37.6343150 37.634317 55.78809 Москва, проспект Мира, 72 55.7889420, 37.6362330 37.636356 55.788945 Москва, проспект Мира, 73 55.7890812, 37.6343498 37.634272 55.789072 Москва, проспект Мира, 74 55.7895170, 37.6352640 37.635341 55.789143 Москва, проспект Мира, 75 55.7897608, 37.6344465 37.634326 55.789775 Москва, проспект Мира, 76 55.7904140, 37.6352610 37.635215 55.790737 Москва, проспект Мира, 77 55.7900105, 37.6348253 37.634299 55.789937 Москва, проспект Мира, 78 55.7914240, 37.6351680 37.635206 55.791258
Вообщем, все равно не понял, как проверить, что конкретные координаты принадлежат конкретному названию точки на карте (1, 2, 3, 4, 5, 6, 7, 8), каждая из которых принадлежит отдельно взятому Poligon... И желательно, чтобы напротив каждого адреса ставилось название....
Или как-то еще...
Ок, допустим я получил в Excel
Adress Google Yandex Москва, проспект Мира, 71 55.7880540, 37.6343150 37.634317 55.78809 Москва, проспект Мира, 72 55.7889420, 37.6362330 37.636356 55.788945 Москва, проспект Мира, 73 55.7890812, 37.6343498 37.634272 55.789072 Москва, проспект Мира, 74 55.7895170, 37.6352640 37.635341 55.789143 Москва, проспект Мира, 75 55.7897608, 37.6344465 37.634326 55.789775 Москва, проспект Мира, 76 55.7904140, 37.6352610 37.635215 55.790737 Москва, проспект Мира, 77 55.7900105, 37.6348253 37.634299 55.789937 Москва, проспект Мира, 78 55.7914240, 37.6351680 37.635206 55.791258
Вообщем, все равно не понял, как проверить, что конкретные координаты принадлежат конкретному названию точки на карте (1, 2, 3, 4, 5, 6, 7, 8), каждая из которых принадлежит отдельно взятому Poligon... И желательно, чтобы напротив каждого адреса ставилось название....
Вам нужно понять, что Excel не ГИС-система ака ArcMap, где можно выполнить пространственный запрос для получения атрибутов для объектов одного слоя по пересечению или нахождению в объекте другого слоя. Так что у вас единственный путь - написание макроса. Который через DOMDocument, используя XPath, находит необходимую информацию в KML. Для координат точек вам нужно строку превратить в пару чисел широта долгота, а для полигонов создать одномерный массив, в котором координата array(2n) содержит долготу, а array(2n+1) широту, тогда функция InPoligon и будет работать для проверки принадлежности точки полигону. А, зная какой полигон вы проверяете, вы по его атрибутивным данным в KML выводите на лист название точки и название полигона в котором она находится. Как-то так, если кратко.
Вам нужно понять, что Excel не ГИС-система ака ArcMap, где можно выполнить пространственный запрос для получения атрибутов для объектов одного слоя по пересечению или нахождению в объекте другого слоя. Так что у вас единственный путь - написание макроса. Который через DOMDocument, используя XPath, находит необходимую информацию в KML. Для координат точек вам нужно строку превратить в пару чисел широта долгота, а для полигонов создать одномерный массив, в котором координата array(2n) содержит долготу, а array(2n+1) широту, тогда функция InPoligon и будет работать для проверки принадлежности точки полигону. А, зная какой полигон вы проверяете, вы по его атрибутивным данным в KML выводите на лист название точки и название полигона в котором она находится. Как-то так, если кратко.anvg
Сообщение отредактировал anvg - Понедельник, 23.05.2016, 17:46
Логика правильная... но просмотрев KML файл... смог найти там только координаты полигона и название загруженных точек Если прорабатывать макросами, то нужны координаты, и если получать геокодированием координаты точки, то можно или через через браузерную строку формировать запрос с ключем (есть возможность в google maps)
Вопрос, как массово получить географические координаты и полигона и точек в kml одновременно?
Вот kml файл.... DOMDocument... где координаты точек... их нет... 1) Какую конкретно строку нужно конвертировать в долготу и широту точек?
[vba]
Код
This XML file does not appear to have any style information associated with it. The document tree is shown below. <kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <name>Карта без названия</name> <description> <![CDATA[ ]]> </description> <Folder> <name>Вторая карта.xlsx</name> <Placemark> <name>1.0</name> <description> <![CDATA[ Москва, проспект Мира, 71 ]]> </description> <styleUrl>#icon-503-D698AD</styleUrl> <address>Москва, проспект Мира, 71</address> </Placemark> <Placemark> <name>2.0</name> <description> <![CDATA[ Москва, проспект Мира, 72 ]]> </description> <styleUrl>#icon-503-93D7E8</styleUrl> <address>Москва, проспект Мира, 72</address> </Placemark> <Placemark> <name>3.0</name> <description> <![CDATA[ Москва, проспект Мира, 73 ]]> </description> <styleUrl>#icon-503-FAD199</styleUrl> <address>Москва, проспект Мира, 73</address> </Placemark> <Placemark> <name>4.0</name> <description> <![CDATA[ Москва, проспект Мира, 74 ]]> </description> <styleUrl>#icon-503-9FC3FF</styleUrl> <address>Москва, проспект Мира, 74</address> </Placemark> <Placemark> <name>5.0</name> <description> <![CDATA[ Москва, проспект Мира, 75 ]]> </description> <styleUrl>#icon-503-A7B5D7</styleUrl> <address>Москва, проспект Мира, 75</address> </Placemark> <Placemark> <name>6.0</name> <description> <![CDATA[ Москва, проспект Мира, 76 ]]> </description> <styleUrl>#icon-503-F9F7A6</styleUrl> <address>Москва, проспект Мира, 76</address> </Placemark> <Placemark> <name>7.0</name> <description> <![CDATA[ Москва, проспект Мира, 77 ]]> </description> <styleUrl>#icon-503-7C3592</styleUrl> <address>Москва, проспект Мира, 77</address> </Placemark> <Placemark> <name>8.0</name> <description> <![CDATA[ Москва, проспект Мира, 78 ]]> </description> <styleUrl>#icon-503-0BA9CC</styleUrl> <address>Москва, проспект Мира, 78</address> </Placemark> </Folder> <Folder> <name>Слой без названия</name> </Folder> <Folder> <name>Слой без названия</name> </Folder> <Folder> <name>Слой без названия</name> <Placemark> <name>ПерваяЗона</name> <styleUrl>#poly-000000-1-77-nodesc</styleUrl> <Polygon> <outerBoundaryIs> <LinearRing> <tessellate>1</tessellate> <coordinates> 37.6330233,55.7905938,0.0 37.6342463,55.7895322,0.0 37.6369929,55.7913297,0.0 37.6348257,55.7924154,0.0 37.6330233,55.7905938,0.0 </coordinates> </LinearRing> </outerBoundaryIs> </Polygon> </Placemark> <Placemark> <name>ВтораяЗона</name> <styleUrl>#poly-000000-1-77-nodesc</styleUrl> <Polygon> <outerBoundaryIs> <LinearRing> <tessellate>1</tessellate> <coordinates> 37.633667,55.7891944,0.0 37.6337528,55.7869624,0.0 37.6378083,55.7886877,0.0 37.636199,55.7903887,0.0 37.6338387,55.7892547,0.0 37.633667,55.7891944,0.0 </coordinates> </LinearRing> </outerBoundaryIs> </Polygon> </Placemark> </Folder> <Style id="icon-503-0BA9CC"> <IconStyle> <color>ffCCA90B</color> <scale>1.1</scale> <Icon> <href> http://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png </href> </Icon> <hotSpot x="16" y="31" xunits="pixels" yunits="insetPixels"></hotSpot> </IconStyle> </Style> <Style id="icon-503-7C3592"> <IconStyle> <color>ff92357C</color> <scale>1.1</scale> <Icon> <href> http://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png </href> </Icon> <hotSpot x="16" y="31" xunits="pixels" yunits="insetPixels"></hotSpot> </IconStyle> </Style> <Style id="icon-503-93D7E8"> <IconStyle> <color>ffE8D793</color> <scale>1.1</scale> <Icon> <href> http://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png </href> </Icon> <hotSpot x="16" y="31" xunits="pixels" yunits="insetPixels"></hotSpot> </IconStyle> </Style> <Style id="icon-503-9FC3FF"> <IconStyle> <color>ffFFC39F</color> <scale>1.1</scale> <Icon> <href> http://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png </href> </Icon> <hotSpot x="16" y="31" xunits="pixels" yunits="insetPixels"></hotSpot> </IconStyle> </Style> <Style id="icon-503-A7B5D7"> <IconStyle> <color>ffD7B5A7</color> <scale>1.1</scale> <Icon> <href> http://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png </href> </Icon> <hotSpot x="16" y="31" xunits="pixels" yunits="insetPixels"></hotSpot> </IconStyle> </Style> <Style id="icon-503-D698AD"> <IconStyle> <color>ffAD98D6</color> <scale>1.1</scale> <Icon> <href> http://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png </href> </Icon> <hotSpot x="16" y="31" xunits="pixels" yunits="insetPixels"></hotSpot> </IconStyle> </Style> <Style id="icon-503-F9F7A6"> <IconStyle> <color>ffA6F7F9</color> <scale>1.1</scale> <Icon> <href> http://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png </href> </Icon> <hotSpot x="16" y="31" xunits="pixels" yunits="insetPixels"></hotSpot> </IconStyle> </Style> <Style id="icon-503-FAD199"> <IconStyle> <color>ff99D1FA</color> <scale>1.1</scale> <Icon> <href> http://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png </href> </Icon> <hotSpot x="16" y="31" xunits="pixels" yunits="insetPixels"></hotSpot> </IconStyle> </Style> <Style id="poly-000000-1-77-nodesc-normal"> <LineStyle> <color>ff000000</color> <width>1</width> </LineStyle> <PolyStyle> <color>4D000000</color> <fill>1</fill> <outline>1</outline> </PolyStyle> <BalloonStyle> <text> <![CDATA[ <h3>$[name]</h3> ]]> </text> </BalloonStyle> </Style> <Style id="poly-000000-1-77-nodesc-highlight"> <LineStyle> <color>ff000000</color> <width>2.0</width> </LineStyle> <PolyStyle> <color>4D000000</color> <fill>1</fill> <outline>1</outline> </PolyStyle> <BalloonStyle> <text> <![CDATA[ <h3>$[name]</h3> ]]> </text> </BalloonStyle> </Style> <StyleMap id="poly-000000-1-77-nodesc"> <Pair> <key>normal</key> <styleUrl>#poly-000000-1-77-nodesc-normal</styleUrl> </Pair> <Pair> <key>highlight</key> <styleUrl>#poly-000000-1-77-nodesc-highlight</styleUrl> </Pair> </StyleMap> </Document> </kml>
[/vba]
2) Если я не ошибаюсь, координаты точек полигона даны в форме одномерного массива уже в kml?
Логика правильная... но просмотрев KML файл... смог найти там только координаты полигона и название загруженных точек Если прорабатывать макросами, то нужны координаты, и если получать геокодированием координаты точки, то можно или через через браузерную строку формировать запрос с ключем (есть возможность в google maps)
Вопрос, как массово получить географические координаты и полигона и точек в kml одновременно?
Вот kml файл.... DOMDocument... где координаты точек... их нет... 1) Какую конкретно строку нужно конвертировать в долготу и широту точек?
[vba]
Код
This XML file does not appear to have any style information associated with it. The document tree is shown below. <kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <name>Карта без названия</name> <description> <![CDATA[ ]]> </description> <Folder> <name>Вторая карта.xlsx</name> <Placemark> <name>1.0</name> <description> <![CDATA[ Москва, проспект Мира, 71 ]]> </description> <styleUrl>#icon-503-D698AD</styleUrl> <address>Москва, проспект Мира, 71</address> </Placemark> <Placemark> <name>2.0</name> <description> <![CDATA[ Москва, проспект Мира, 72 ]]> </description> <styleUrl>#icon-503-93D7E8</styleUrl> <address>Москва, проспект Мира, 72</address> </Placemark> <Placemark> <name>3.0</name> <description> <![CDATA[ Москва, проспект Мира, 73 ]]> </description> <styleUrl>#icon-503-FAD199</styleUrl> <address>Москва, проспект Мира, 73</address> </Placemark> <Placemark> <name>4.0</name> <description> <![CDATA[ Москва, проспект Мира, 74 ]]> </description> <styleUrl>#icon-503-9FC3FF</styleUrl> <address>Москва, проспект Мира, 74</address> </Placemark> <Placemark> <name>5.0</name> <description> <![CDATA[ Москва, проспект Мира, 75 ]]> </description> <styleUrl>#icon-503-A7B5D7</styleUrl> <address>Москва, проспект Мира, 75</address> </Placemark> <Placemark> <name>6.0</name> <description> <![CDATA[ Москва, проспект Мира, 76 ]]> </description> <styleUrl>#icon-503-F9F7A6</styleUrl> <address>Москва, проспект Мира, 76</address> </Placemark> <Placemark> <name>7.0</name> <description> <![CDATA[ Москва, проспект Мира, 77 ]]> </description> <styleUrl>#icon-503-7C3592</styleUrl> <address>Москва, проспект Мира, 77</address> </Placemark> <Placemark> <name>8.0</name> <description> <![CDATA[ Москва, проспект Мира, 78 ]]> </description> <styleUrl>#icon-503-0BA9CC</styleUrl> <address>Москва, проспект Мира, 78</address> </Placemark> </Folder> <Folder> <name>Слой без названия</name> </Folder> <Folder> <name>Слой без названия</name> </Folder> <Folder> <name>Слой без названия</name> <Placemark> <name>ПерваяЗона</name> <styleUrl>#poly-000000-1-77-nodesc</styleUrl> <Polygon> <outerBoundaryIs> <LinearRing> <tessellate>1</tessellate> <coordinates> 37.6330233,55.7905938,0.0 37.6342463,55.7895322,0.0 37.6369929,55.7913297,0.0 37.6348257,55.7924154,0.0 37.6330233,55.7905938,0.0 </coordinates> </LinearRing> </outerBoundaryIs> </Polygon> </Placemark> <Placemark> <name>ВтораяЗона</name> <styleUrl>#poly-000000-1-77-nodesc</styleUrl> <Polygon> <outerBoundaryIs> <LinearRing> <tessellate>1</tessellate> <coordinates> 37.633667,55.7891944,0.0 37.6337528,55.7869624,0.0 37.6378083,55.7886877,0.0 37.636199,55.7903887,0.0 37.6338387,55.7892547,0.0 37.633667,55.7891944,0.0 </coordinates> </LinearRing> </outerBoundaryIs> </Polygon> </Placemark> </Folder> <Style id="icon-503-0BA9CC"> <IconStyle> <color>ffCCA90B</color> <scale>1.1</scale> <Icon> <href> http://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png </href> </Icon> <hotSpot x="16" y="31" xunits="pixels" yunits="insetPixels"></hotSpot> </IconStyle> </Style> <Style id="icon-503-7C3592"> <IconStyle> <color>ff92357C</color> <scale>1.1</scale> <Icon> <href> http://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png </href> </Icon> <hotSpot x="16" y="31" xunits="pixels" yunits="insetPixels"></hotSpot> </IconStyle> </Style> <Style id="icon-503-93D7E8"> <IconStyle> <color>ffE8D793</color> <scale>1.1</scale> <Icon> <href> http://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png </href> </Icon> <hotSpot x="16" y="31" xunits="pixels" yunits="insetPixels"></hotSpot> </IconStyle> </Style> <Style id="icon-503-9FC3FF"> <IconStyle> <color>ffFFC39F</color> <scale>1.1</scale> <Icon> <href> http://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png </href> </Icon> <hotSpot x="16" y="31" xunits="pixels" yunits="insetPixels"></hotSpot> </IconStyle> </Style> <Style id="icon-503-A7B5D7"> <IconStyle> <color>ffD7B5A7</color> <scale>1.1</scale> <Icon> <href> http://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png </href> </Icon> <hotSpot x="16" y="31" xunits="pixels" yunits="insetPixels"></hotSpot> </IconStyle> </Style> <Style id="icon-503-D698AD"> <IconStyle> <color>ffAD98D6</color> <scale>1.1</scale> <Icon> <href> http://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png </href> </Icon> <hotSpot x="16" y="31" xunits="pixels" yunits="insetPixels"></hotSpot> </IconStyle> </Style> <Style id="icon-503-F9F7A6"> <IconStyle> <color>ffA6F7F9</color> <scale>1.1</scale> <Icon> <href> http://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png </href> </Icon> <hotSpot x="16" y="31" xunits="pixels" yunits="insetPixels"></hotSpot> </IconStyle> </Style> <Style id="icon-503-FAD199"> <IconStyle> <color>ff99D1FA</color> <scale>1.1</scale> <Icon> <href> http://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png </href> </Icon> <hotSpot x="16" y="31" xunits="pixels" yunits="insetPixels"></hotSpot> </IconStyle> </Style> <Style id="poly-000000-1-77-nodesc-normal"> <LineStyle> <color>ff000000</color> <width>1</width> </LineStyle> <PolyStyle> <color>4D000000</color> <fill>1</fill> <outline>1</outline> </PolyStyle> <BalloonStyle> <text> <![CDATA[ <h3>$[name]</h3> ]]> </text> </BalloonStyle> </Style> <Style id="poly-000000-1-77-nodesc-highlight"> <LineStyle> <color>ff000000</color> <width>2.0</width> </LineStyle> <PolyStyle> <color>4D000000</color> <fill>1</fill> <outline>1</outline> </PolyStyle> <BalloonStyle> <text> <![CDATA[ <h3>$[name]</h3> ]]> </text> </BalloonStyle> </Style> <StyleMap id="poly-000000-1-77-nodesc"> <Pair> <key>normal</key> <styleUrl>#poly-000000-1-77-nodesc-normal</styleUrl> </Pair> <Pair> <key>highlight</key> <styleUrl>#poly-000000-1-77-nodesc-highlight</styleUrl> </Pair> </StyleMap> </Document> </kml>
[/vba]
2) Если я не ошибаюсь, координаты точек полигона даны в форме одномерного массива уже в kml?ant6729
Для этого нужно формировать запрос к maps.google (как описано по ссылке выше), используя объект ServerXMLHTTP текст адреса точки. Как отклик получите xml-ответ, содержащий описание объекта включая его координаты. Вот их и используете.
Цитата
Какую конкретно строку нужно конвертировать в долготу и широту точек?
Цитата
Если я не ошибаюсь, координаты точек полигона даны в форме одномерного массива уже в kml?
Увы - ошибаетесь. Координаты точек в вашем файле только для полигонов. Это текстовая строка, содержащая для каждой точки полигона, три координаты: долготу, широту и возвышение. Разбиваете через Split на массив строк, затем преобразовываете в числа, используя Application.Evaluate (она всегда воспринимает точку, как десятичный разделитель).
Цитата
Я в правильном направлении рассуждаю?)
Худо-бедно, да. Только вот, учитывая ваш уровень владения материалом, мне пришлось бы детально расписывать алгоритм, а это не 10-15 минут. Уж, извините. Кратко 1. Из KML файла для каждого полигона сформировать числовой массив координат (для работы с InPolygon) и сопоставить массиву имя полигона (можно создать для этого пользовательский класс). 2. Для каждой точки Placemark проверять наличие тега координат, если есть, то преобразовывать текст координат в числа координат 3. Если координат есть, то создать запрос геокодирования и из полученного ответа извлекать координаты точки. 4. Проверять через InPolygon в каком полигоне точка, тот полигон, для которого функция вернёт True считаем полигоном, содержащим точку, используем ассоциированное имя полигона. 5. Выводим название точки и название полигона, которому она принадлежит на лист.
Цитата
если получать геокодированием координаты точки
Для этого нужно формировать запрос к maps.google (как описано по ссылке выше), используя объект ServerXMLHTTP текст адреса точки. Как отклик получите xml-ответ, содержащий описание объекта включая его координаты. Вот их и используете.
Цитата
Какую конкретно строку нужно конвертировать в долготу и широту точек?
Цитата
Если я не ошибаюсь, координаты точек полигона даны в форме одномерного массива уже в kml?
Увы - ошибаетесь. Координаты точек в вашем файле только для полигонов. Это текстовая строка, содержащая для каждой точки полигона, три координаты: долготу, широту и возвышение. Разбиваете через Split на массив строк, затем преобразовываете в числа, используя Application.Evaluate (она всегда воспринимает точку, как десятичный разделитель).
Цитата
Я в правильном направлении рассуждаю?)
Худо-бедно, да. Только вот, учитывая ваш уровень владения материалом, мне пришлось бы детально расписывать алгоритм, а это не 10-15 минут. Уж, извините. Кратко 1. Из KML файла для каждого полигона сформировать числовой массив координат (для работы с InPolygon) и сопоставить массиву имя полигона (можно создать для этого пользовательский класс). 2. Для каждой точки Placemark проверять наличие тега координат, если есть, то преобразовывать текст координат в числа координат 3. Если координат есть, то создать запрос геокодирования и из полученного ответа извлекать координаты точки. 4. Проверять через InPolygon в каком полигоне точка, тот полигон, для которого функция вернёт True считаем полигоном, содержащим точку, используем ассоциированное имя полигона. 5. Выводим название точки и название полигона, которому она принадлежит на лист.anvg