Как создать полигон с отверстием внутри в API статических карт Google?

Когда я пытаюсь создать внешний многоугольник с отверстием внутри с помощью Static Maps API, цвет заливки заполняет внутренний многоугольник, и я не вижу параметров, чтобы нарисовать это. Вот как это выглядит: Отказ полигона с отверстиями

это запрос = цвет: 0xFF0000AA | вес:3| ENC: MJR {FsjjL{А}} Д Е |DxAvD~EWD

1 ответ

Решение

Поскольку в настоящее время эта функция недоступна в API статических карт, я предложил обходной путь, обеспечивающий "эффект дыры":

1) Определите внешние и внутренние линии многоугольника без "заливки", как в следующем примере: https://maps.googleapis.com/maps/api/staticmap?size=640x640&maptype=roadmap&zoom=16&path=color:0xFF0000AA|weight:3|enc:csr{FcgiLuSm[rYua@zIvHvCdNcAzKmRhX&path=color:0xFF0000AA|weight:3|enc:mjr{FsjjL{A}D}E|DxAvD~EwD введите описание изображения здесь

2) Создайте многоугольник, который удаляет часть внешнего многоугольника и внутреннего многоугольника, создавая как упаковщик. Установите вес равным нулю 'weight=0' и выберите цвет для заполнения, как в этом примере: https://maps.googleapis.com/maps/api/staticmap?size=640x640&maptype=roadmap&zoom=16&&path=color:0x0ea001AA|weight:0|fillcolor:0xFFB6C1BB|enc:csr{FcgiLuSm[rYua@zIvHvCdNcAzKwIeI{A}D}E|DxAvDu@v\ Большая порция начинки3) Аналогично шагу 2, создайте часть, в которой нам не хватает заполненного многоугольника, как в этом примере: https://maps.googleapis.com/maps/api/staticmap?size=640x640&maptype=roadmap&zoom=16&path=color:0x0ea001AA|weight:0|fillcolor:0xFFB6C1BB|enc:csr{FcgiLlRiXwIeI_FvDu@v\ Последняя порция начинки4) Наконец сшить все пути вместе, чтобы смоделировать желаемое отверстие: https://maps.googleapis.com/maps/api/staticmap?size=640x640&maptype=roadmap&zoom=16&path=color:0xFF0000AA|weight:3|enc:csr{FcgiLuSm[rYua@zIvHvCdNcAzKmRhX&path=color:0xFF0000AA|weight:3|enc:mjr{FsjjL{A}D}E|DxAvD~EwD&path=color:0x0ea001AA|weight:0|fillcolor:0xFFB6C1BB|enc:csr{FcgiLuSm[rYua@zIvHvCdNcAzKwIeI{A}D}E|DxAvDu@v%5C&path=color:0x0ea001AA|weight:0|fillcolor:0xFFB6C1BB|enc:csr{FcgiLlRiXwIeI_FvDu@v%5C Полигон с эффектом отверстия

Существует утилита кодирования-декодирования Polyline, которая может помочь вам увидеть весь процесс по адресу https://developers.google.com/maps/documentation/utilities/polylineutility

Чтобы построить ответ от Soldeplata Saketos, для заполняющей части можно использовать один путь для контура + отверстия, без необходимости разбивать его. Кажется, API Статики Карт использует какой-то трафаретный тест, в котором, если область рисуется пару (0, 2...) раз, она фактически не заполняется, а при рисовании ухудшается (1 или более) число раз., он заполняется цветом заливки.

Основываясь на этом принципе, вот код Python, основанный на библиотеке Shapely (но, надеюсь, переносимый на другие языки или библиотеки):

fill_coords = list(poly.exterior.coords)
outline_coords = [poly.exterior.coords]
for hole in poly.interiors:
  fill_coords.extend(hole.coords)
  # always close by adding the first point on the exterior
  fill_coords.append(fill_coords[0])
  outline_coords.append(hole.coords)

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

Затем, как предлагает Soldeplata Saketos, нарисуйте заливку и контур отдельно:

  • один путь = для заполнения (fill_coords), с цветом заливки и весом =0
  • отдельный путь = для каждого из членов outline_coords, без цвета заливки. Это нарисует границу многоугольника

Вот изображение результата:

многоугольник с 2 отверстиями

(масштабная линейка добавляется дополнительным кодом, но изображение над ним - это то, которое получено из Статического API Карт)

Вот запрос (замените параметр API_KEY своим собственным):

https://maps.googleapis.com/maps/api/staticmap?maptype=hybrid&key=_API_KEY_& size = 640x593 & scale = 2 & center = 50.95141146936693,2.0425128936767543 & zoom = 16 & path = fillcolor% 3A0x0000ff66% 7CoS%% 3CD 3 %D3% 3AD3A0% 3A0% 3A0% 3A0% 3A0% 3A0% 3A0D X_AcEqAiJvEuE_% 40% 7DArFgFdC% 60Kd% 40a% 40% 60A% 7B% 40zAqCtAmAjBHz% 40zDiYzLz% 40% 7C% 40hAaEyBaCw% 40vCj% 40lBhY% 7BLkECx% 40% 7CAb% 40u% 40MsBuAGDrAjEB & путь = цвет% 3A0x0000ffff% 7Cweight% 3A2% 7Cenc% 3AO% 7D% 7DuHqenKaZ ~ X_AcEqAiJvEuE_% 40% 7DArFgFdC% 60Kd% 40a% 40% 60A% 7B% 40zAqCtAmAjBHz% 40zD & путь = цвет% 3A0x0000ffff% 7Cweight% 3A2% 7Cenc% 3Ayw ~ uHuwmKz% 40% 7C% 40hAaEyBaCw% 40vCj% 40lb & путь = цвет% 3A0x0000ffff% 7Cweight% 3A2% 7Cenc% 3A% 7Bc ~ uHuenKx% 40% 7CAb% 40u% 40MsBuAGDrA

Другие вопросы по тегам