порядок контуров полигона в GML

Вопросы по нескольким пакетам сразу, или вопросы, которые непонятно к какой ГИС отнести
Ответить
Аватара пользователя
ginpetr
Завсегдатай
Сообщения: 299
Зарегистрирован: 21 июн 2011, 12:07
Репутация: 119
Откуда: Орск
Контактная информация:

порядок контуров полигона в GML

Сообщение ginpetr » 08 апр 2021, 09:20

Здравствуйте!
Выгружаю с помощью Mapbasic GML.
Подскажите как правильно указать порядок контуров exterior/interior в элементе <gml:MultiPolygon>, чтобы объект корректно отображался.
В мапинфо объект выглядит так
Снимок экрана 2021-04-08 111351.jpg
в Мапинфо
Снимок экрана 2021-04-08 111351.jpg (44.54 КБ) 759 просмотров
GML в QGIS так
Снимок экрана 2021-04-08 111429.jpg
в QGIS
Снимок экрана 2021-04-08 111429.jpg (26.67 КБ) 759 просмотров

Код: Выделить всё

<?xml version="1.0" encoding="UTF-8"?>
<gml:FeatureCollection gml:id="795e7d31-adbd-4207-8e4b-ac9c8418ebeb" xmlns="http://fgistp" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<gml:boundedBy>
  <gml:Envelope srsName="EPSG:3857">
    <gml:lowerCorner>-40075016.69 -20037508.34</gml:lowerCorner>
    <gml:upperCorner>40075016.69 20037508.34</gml:upperCorner>
  </gml:Envelope>
</gml:boundedBy>
<gml:featureMember>
	<Untitled>
		<gml:MultiPolygon>
			<gml:polygonMember>
				<gml:Polygon>
					<gml:exterior>
						<gml:LinearRing>
							<gml:pos> 12613854.0 6819635.96 </gml:pos>
							<gml:pos> 12612539.58 6820878.89 </gml:pos>
							<gml:pos> 12611953.96 6820901.17 </gml:pos>
							<gml:pos> 12610973.28 6819852.01 </gml:pos>
							<gml:pos> 12610955.73 6819125.02 </gml:pos>
							<gml:pos> 12611227.92 6818915.93 </gml:pos>
							<gml:pos> 12611209.93 6818165.53 </gml:pos>
							<gml:pos> 12612287.54 6817259.49 </gml:pos>
							<gml:pos> 12612366.85 6816837.86 </gml:pos>
							<gml:pos> 12612948.26 6816336.42 </gml:pos>
							<gml:pos> 12613786.51 6817163.55 </gml:pos>
							<gml:pos> 12613854.0 6819635.96 </gml:pos>
						</gml:LinearRing>
					</gml:exterior>
				</gml:Polygon>
			</gml:polygonMember>
			<gml:polygonMember>
				<gml:Polygon>
					<gml:interior>
						<gml:LinearRing>
							<gml:pos> 12613243.81 6819962.23 </gml:pos>
							<gml:pos> 12612396.55 6820731.53 </gml:pos>
							<gml:pos> 12611286.43 6819667.22 </gml:pos>
							<gml:pos> 12611794.42 6818490.74 </gml:pos>
							<gml:pos> 12613243.81 6819962.23 </gml:pos>
						</gml:LinearRing>
					</gml:interior>
				</gml:Polygon>
			</gml:polygonMember>
			<gml:polygonMember>
				<gml:Polygon>
					<gml:interior>
						<gml:LinearRing>
							<gml:pos> 12613399.87 6817509.84 </gml:pos>
							<gml:pos> 12612519.1 6818535.32 </gml:pos>
							<gml:pos> 12611970.23 6817949.06 </gml:pos>
							<gml:pos> 12612864.74 6816986.18 </gml:pos>
							<gml:pos> 12613399.87 6817509.84 </gml:pos>
						</gml:LinearRing>
					</gml:interior>
				</gml:Polygon>
			</gml:polygonMember>
			<gml:polygonMember>
				<gml:Polygon>
					<gml:interior>
						<gml:LinearRing>
							<gml:pos> 12613500.29 6818178.67 </gml:pos>
							<gml:pos> 12613355.34 6819349.06 </gml:pos>
							<gml:pos> 12612774.54 6818783.31 </gml:pos>
							<gml:pos> 12613500.29 6818178.67 </gml:pos>
						</gml:LinearRing>
					</gml:interior>
				</gml:Polygon>
			</gml:polygonMember>
			<gml:polygonMember>
				<gml:Polygon>
					<gml:exterior>
						<gml:LinearRing>
							<gml:pos> 12613098.86 6817532.12 </gml:pos>
							<gml:pos> 12612563.74 6818111.81 </gml:pos>
							<gml:pos> 12612421.31 6817855.65 </gml:pos>
							<gml:pos> 12612786.72 6817431.92 </gml:pos>
							<gml:pos> 12613098.86 6817532.12 </gml:pos>
						</gml:LinearRing>
					</gml:exterior>
				</gml:Polygon>
			</gml:polygonMember>
			<gml:polygonMember>
				<gml:Polygon>
					<gml:exterior>
						<gml:LinearRing>
							<gml:pos> 12612563.74 6819438.23 </gml:pos>
							<gml:pos> 12612095.54 6820129.36 </gml:pos>
							<gml:pos> 12611532.53 6819589.61 </gml:pos>
							<gml:pos> 12611905.95 6818791.76 </gml:pos>
							<gml:pos> 12612563.74 6819438.23 </gml:pos>
						</gml:LinearRing>
					</gml:exterior>
				</gml:Polygon>
			</gml:polygonMember>
			<gml:polygonMember>
				<gml:Polygon>
					<gml:exterior>
						<gml:LinearRing>
							<gml:pos> 12612853.6 6820084.76 </gml:pos>
							<gml:pos> 12612463.43 6820430.43 </gml:pos>
							<gml:pos> 12612257.85 6820209.01 </gml:pos>
							<gml:pos> 12612530.24 6819817.24 </gml:pos>
							<gml:pos> 12612853.6 6820084.76 </gml:pos>
						</gml:LinearRing>
					</gml:exterior>
				</gml:Polygon>
			</gml:polygonMember>
			<gml:polygonMember>
				<gml:Polygon>
					<gml:interior>
						<gml:LinearRing>
							<gml:pos> 12612407.69 6819471.77 </gml:pos>
							<gml:pos> 12612128.93 6819794.94 </gml:pos>
							<gml:pos> 12611845.68 6819544.49 </gml:pos>
							<gml:pos> 12611995.12 6819170.71 </gml:pos>
							<gml:pos> 12612407.69 6819471.77 </gml:pos>
						</gml:LinearRing>
					</gml:interior>
				</gml:Polygon>
			</gml:polygonMember>
		</gml:MultiPolygon>
		<id>0</id>
	</Untitled>
</gml:featureMember>
</gml:FeatureCollection>
Мне виделось логичным описать сначала внешний контур, потом вырезать отверстия, потом в них поместить контуры и т.д.

Ivor
Активный участник
Сообщения: 137
Зарегистрирован: 11 дек 2006, 09:46
Репутация: 44
Откуда: Иркутск

Re: порядок контуров полигона в GML

Сообщение Ivor » 08 апр 2021, 09:32

Потому что вы перенакрутили. Достаточно было так:

Код: Выделить всё

<?xml version="1.0" encoding="UTF-8"?>
<gml:FeatureCollection gml:id="795e7d31-adbd-4207-8e4b-ac9c8418ebeb" xmlns="http://fgistp" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<gml:boundedBy>
  <gml:Envelope srsName="EPSG:3857">
    <gml:lowerCorner>-40075016.69 -20037508.34</gml:lowerCorner>
    <gml:upperCorner>40075016.69 20037508.34</gml:upperCorner>
  </gml:Envelope>
</gml:boundedBy>
<gml:featureMember>
	<Untitled>
		<gml:MultiPolygon>
			<gml:polygonMember>
				<gml:Polygon>
					<gml:exterior>
						<gml:LinearRing>
							<gml:pos> 12613854.0 6819635.96 </gml:pos>
							<gml:pos> 12612539.58 6820878.89 </gml:pos>
							<gml:pos> 12611953.96 6820901.17 </gml:pos>
							<gml:pos> 12610973.28 6819852.01 </gml:pos>
							<gml:pos> 12610955.73 6819125.02 </gml:pos>
							<gml:pos> 12611227.92 6818915.93 </gml:pos>
							<gml:pos> 12611209.93 6818165.53 </gml:pos>
							<gml:pos> 12612287.54 6817259.49 </gml:pos>
							<gml:pos> 12612366.85 6816837.86 </gml:pos>
							<gml:pos> 12612948.26 6816336.42 </gml:pos>
							<gml:pos> 12613786.51 6817163.55 </gml:pos>
							<gml:pos> 12613854.0 6819635.96 </gml:pos>
						</gml:LinearRing>
					</gml:exterior>
					<gml:interior>
						<gml:LinearRing>
							<gml:pos> 12613243.81 6819962.23 </gml:pos>
							<gml:pos> 12612396.55 6820731.53 </gml:pos>
							<gml:pos> 12611286.43 6819667.22 </gml:pos>
							<gml:pos> 12611794.42 6818490.74 </gml:pos>
							<gml:pos> 12613243.81 6819962.23 </gml:pos>
						</gml:LinearRing>
					</gml:interior>
					<gml:interior>
						<gml:LinearRing>
							<gml:pos> 12613399.87 6817509.84 </gml:pos>
							<gml:pos> 12612519.1 6818535.32 </gml:pos>
							<gml:pos> 12611970.23 6817949.06 </gml:pos>
							<gml:pos> 12612864.74 6816986.18 </gml:pos>
							<gml:pos> 12613399.87 6817509.84 </gml:pos>
						</gml:LinearRing>
					</gml:interior>
					<gml:interior>
						<gml:LinearRing>
							<gml:pos> 12613500.29 6818178.67 </gml:pos>
							<gml:pos> 12613355.34 6819349.06 </gml:pos>
							<gml:pos> 12612774.54 6818783.31 </gml:pos>
							<gml:pos> 12613500.29 6818178.67 </gml:pos>
						</gml:LinearRing>
					</gml:interior>
					<gml:interior>
						<gml:LinearRing>
							<gml:pos> 12613098.86 6817532.12 </gml:pos>
							<gml:pos> 12612563.74 6818111.81 </gml:pos>
							<gml:pos> 12612421.31 6817855.65 </gml:pos>
							<gml:pos> 12612786.72 6817431.92 </gml:pos>
							<gml:pos> 12613098.86 6817532.12 </gml:pos>
						</gml:LinearRing>
					</gml:interior>
					<gml:interior>
						<gml:LinearRing>
							<gml:pos> 12612563.74 6819438.23 </gml:pos>
							<gml:pos> 12612095.54 6820129.36 </gml:pos>
							<gml:pos> 12611532.53 6819589.61 </gml:pos>
							<gml:pos> 12611905.95 6818791.76 </gml:pos>
							<gml:pos> 12612563.74 6819438.23 </gml:pos>
						</gml:LinearRing>
					</gml:interior>
					<gml:interior>
						<gml:LinearRing>
							<gml:pos> 12612853.6 6820084.76 </gml:pos>
							<gml:pos> 12612463.43 6820430.43 </gml:pos>
							<gml:pos> 12612257.85 6820209.01 </gml:pos>
							<gml:pos> 12612530.24 6819817.24 </gml:pos>
							<gml:pos> 12612853.6 6820084.76 </gml:pos>
						</gml:LinearRing>
					</gml:interior>
					<gml:interior>
						<gml:LinearRing>
							<gml:pos> 12612407.69 6819471.77 </gml:pos>
							<gml:pos> 12612128.93 6819794.94 </gml:pos>
							<gml:pos> 12611845.68 6819544.49 </gml:pos>
							<gml:pos> 12611995.12 6819170.71 </gml:pos>
							<gml:pos> 12612407.69 6819471.77 </gml:pos>
						</gml:LinearRing>
					</gml:interior>
				</gml:Polygon>
			</gml:polygonMember>
		</gml:MultiPolygon>
		<id>0</id>
	</Untitled>
</gml:featureMember>
</gml:FeatureCollection>

Аватара пользователя
ginpetr
Завсегдатай
Сообщения: 299
Зарегистрирован: 21 июн 2011, 12:07
Репутация: 119
Откуда: Орск
Контактная информация:

Re: порядок контуров полигона в GML

Сообщение ginpetr » 08 апр 2021, 09:48

ух ты! а зачем тогда элементы polygonMember и Polygon, если не для разделения контуров?

Ivor
Активный участник
Сообщения: 137
Зарегистрирован: 11 дек 2006, 09:46
Репутация: 44
Откуда: Иркутск

Re: порядок контуров полигона в GML

Сообщение Ivor » 08 апр 2021, 10:02

А не знаю. Я с GML вообще не знаком, но обилие отдельных элементов polygon сразу навело на подозрения. Проверил - работает

Аватара пользователя
ginpetr
Завсегдатай
Сообщения: 299
Зарегистрирован: 21 июн 2011, 12:07
Репутация: 119
Откуда: Орск
Контактная информация:

Re: порядок контуров полигона в GML

Сообщение ginpetr » 08 апр 2021, 10:06

а я, кажется, прозрел. Спасибо!

corew2020
Новоприбывший
Сообщения: 6
Зарегистрирован: 28 май 2020, 11:44
Репутация: 0
Откуда: Ухта
Контактная информация:

Re: порядок контуров полигона в GML

Сообщение corew2020 » 09 апр 2021, 12:10

а вот до меня что-то не особо дошло
Изображение

Ivor
Активный участник
Сообщения: 137
Зарегистрирован: 11 дек 2006, 09:46
Репутация: 44
Откуда: Иркутск

Re: порядок контуров полигона в GML

Сообщение Ivor » 09 апр 2021, 15:09

corew2020, по логике, exterior у полигона может быть один. Всё, что внутри полигона, описывает interior - как дырки, так и острова в дырках. Несколько полигонов и exterior появляются, когда надо описать группу независимых (невложенных) островов.

Ответить

Вернуться в «Общий - ПО»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя