OpenLayers: как перейти к нужному экстенту выбрав значение

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
Аватара пользователя
dobeer
Активный участник
Сообщения: 199
Зарегистрирован: 25 дек 2009, 21:54
Репутация: 1
Откуда: Чита
Контактная информация:

OpenLayers: как перейти к нужному экстенту выбрав значение

Сообщение dobeer » 23 янв 2010, 00:04

А вот меня интересует, как перейти к нужному экстенту выбрав значение из выпадающего списка и чтоб список был прокручивающимся :)

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: OpenLayers: Переключение слоев кнопой

Сообщение Максим Дубинин » 23 янв 2010, 00:19

например вот так (выберите регион)
http://gis-lab.info/projects/osm-errors.html
пристегивайтесь, турбулентность прямо по курсу

Аватара пользователя
dobeer
Активный участник
Сообщения: 199
Зарегистрирован: 25 дек 2009, 21:54
Репутация: 1
Откуда: Чита
Контактная информация:

Re: OpenLayers: как перейти к нужному экстенту выбрав значение

Сообщение dobeer » 23 янв 2010, 15:34

Глянул, попытался внедрить)))...список получился, но без реакции при выборе. Может черканете коротенький пример из пары значений, пожалуйста.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: OpenLayers: как перейти к нужному экстенту выбрав значение

Сообщение Denis Rykov » 23 янв 2010, 19:13

js-функция:

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

function select_func(A) {
	var B = A;
	var bounds = new OpenLayers.Bounds.fromString(B);
	map.zoomToExtent(bounds);
} 
HTML-форма:

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

<form>
<select name="list" onchange="select_func(this.value)">
<option selected value="2999537.617487,5040238.780968,20037508.342789,16854703.690633" SELECTED>Россия
<option selected value="2580039.52835695,6666776.75121229,3648029.36543675,7591493.95982412">Беларусь
<option selected value="2463376.66463638,5526059.96225167,4475866.16217401,6867188.3427968">Украина
...
</select>
</form>
Spatial is now, more than ever, just another column- The Geometry Column.

Аватара пользователя
dobeer
Активный участник
Сообщения: 199
Зарегистрирован: 25 дек 2009, 21:54
Репутация: 1
Откуда: Чита
Контактная информация:

Re: OpenLayers: как перейти к нужному экстенту выбрав значение

Сообщение dobeer » 24 янв 2010, 19:06

Спасибо _DR_ , заработало

Аватара пользователя
dobeer
Активный участник
Сообщения: 199
Зарегистрирован: 25 дек 2009, 21:54
Репутация: 1
Откуда: Чита
Контактная информация:

Re: OpenLayers: как перейти к нужному экстенту выбрав значение

Сообщение dobeer » 16 фев 2010, 11:49

Подскажите пожалуйста, как вышепроделанное сделать если список или кнопка находятся на одной странице, а карта на другой?

Аватара пользователя
wmk
Активный участник
Сообщения: 102
Зарегистрирован: 11 янв 2009, 17:38
Репутация: 0
Откуда: Казань
Контактная информация:

Re: OpenLayers: как перейти к нужному экстенту выбрав значение

Сообщение wmk » 16 фев 2010, 14:07

Всмысле во Frame? , или в другом окне?
OurGuns.ru - пневматическое оружие России и мира
Пневматическое оружие , Страйкбольное оружие , Пейнтбольное оружие

Аватара пользователя
dobeer
Активный участник
Сообщения: 199
Зарегистрирован: 25 дек 2009, 21:54
Репутация: 1
Откуда: Чита
Контактная информация:

Re: OpenLayers: как перейти к нужному экстенту выбрав значение

Сообщение dobeer » 16 фев 2010, 14:41

Сам сайт визуально виден как одна страница, но физически левое поле (с меню) это другая Html страница...я так понимаю это Frame.. :) Вот на ней я и хочу разместить управляющие картой кнопки, списки, флажки...но не знаю как обратиться к карте расположенной физически на другом Html

Аватара пользователя
dobeer
Активный участник
Сообщения: 199
Зарегистрирован: 25 дек 2009, 21:54
Репутация: 1
Откуда: Чита
Контактная информация:

Re: OpenLayers: как перейти к нужному экстенту выбрав значение

Сообщение dobeer » 17 фев 2010, 06:08

ну пожалуста, хоть ктонить подскажите, а то проект встал :D

Аватара пользователя
dobeer
Активный участник
Сообщения: 199
Зарегистрирован: 25 дек 2009, 21:54
Репутация: 1
Откуда: Чита
Контактная информация:

Re: OpenLayers: как перейти к нужному экстенту выбрав значение

Сообщение dobeer » 19 фев 2010, 07:33

Проблему решил сам, так:

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

parent.frames.main.map.zoomToExtent(bounds)
где - имя фрейма с картой

Artem
Интересующийся
Сообщения: 29
Зарегистрирован: 01 сен 2010, 05:59
Репутация: 0

Re: OpenLayers: Переключение слоев кнопой

Сообщение Artem » 02 сен 2010, 08:45

Максим Дубинин писал(а):например вот так (выберите регион)
http://gis-lab.info/projects/osm-errors.html
Ага, то что нужно, только вопрос, как можно сгенерить такой список регионов автоматически? Интересует откуда берутся границы экстента, не руками же они туда заносились?

Аватара пользователя
dobeer
Активный участник
Сообщения: 199
Зарегистрирован: 25 дек 2009, 21:54
Репутация: 1
Откуда: Чита
Контактная информация:

Re: OpenLayers: как перейти к нужному экстенту выбрав значение

Сообщение dobeer » 02 сен 2010, 09:58

Если список большой, то из БД вытаскивать координаты, перед этим их туда конечно нужно занести. Например как делал я можно перегнать шейп-файл с объектами (дома например) в БД PostgreSQL там будет поле с координатами объектов. От туда уже в базу MySQL на сервере...ну вот как то так в кратце. Сгенерировать список можно в PHP...

Artem
Интересующийся
Сообщения: 29
Зарегистрирован: 01 сен 2010, 05:59
Репутация: 0

Re: OpenLayers: как перейти к нужному экстенту выбрав значение

Сообщение Artem » 02 сен 2010, 11:00

если там структура как у SDE - то на php выглядеть будет примерно так:

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

define( "MAPFILE", "C:/ms4w/apps/maps/map.map" );
define( "MODULE", "php_mapscript.dll" );

// load the mapscript module
if (!extension_loaded("MapScript")) dl(MODULE);

// open map
$oMap = ms_newMapObj( MAPFILE );
if(!empty($_GET['layer']) && !empty($_GET['id']))
{
	$serverName='(local)';
	$connectionOptions = array("UID"=>'user', "PWD"=>'psswduser', "Database"=>'sde', "CharacterSet"=>"UTF-8");
	$conn=sqlsrv_connect($serverName, $connectionOptions);
	$sql='SELECT g_table_name FROM sde.SDE_geometry_columns WHERE f_table_name=\''.$_GET['layer'].'\';';
	$query = sqlsrv_query($conn, $sql);
	$row = sqlsrv_fetch_array($query);
	$table=$row[0];
	$sql='SELECT eminx, eminy, emaxx, emaxy FROM '.$table.' WHERE fid='.$_GET['id'].';';
	$query = sqlsrv_query($conn, $sql);
	$row = sqlsrv_fetch_array($query);

	//void setExtent(double minx, double miny, double maxx, double maxy)
	$xl=$row[0]; $yb=$row[1]; $xr=$row[2]; $yt=$row[3];
	if(($xr-$xl)<30000)
	{
		$xr=$row[2]+(30000-($row[2]-$row[0]))/2;
		$xl=$row[0]-(30000-($row[2]-$row[0]))/2;
	}
	if(($yt-$yb)<30000)
	{
		$yt=$row[3]+(30000-($row[3]-$row[1]))/2;
		$yb=$row[1]-(30000-($row[3]-$row[1]))/2;
	}
	$oMap->setExtent($xl, $yb, $xr, $yt);
}
Соответственно, обращаемся через php, ссылка вида "map.php?layer=layername&id=shapeid". Карта сразу же грузиться в нужном экстенте.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: OpenLayers: Переключение слоев кнопой

Сообщение Denis Rykov » 02 сен 2010, 12:18

Artem писал(а):
Максим Дубинин писал(а):например вот так (выберите регион)
http://gis-lab.info/projects/osm-errors.html
Ага, то что нужно, только вопрос, как можно сгенерить такой список регионов автоматически? Интересует откуда берутся границы экстента, не руками же они туда заносились?
Параметры охватов были вычислены с помощью PostGIS следующей командой:

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

SELECT ST_Extent(the_geom),reg from all_bounds GROUP by reg
где reg - имя поля, содержащего название региона. Пример результата.
Spatial is now, more than ever, just another column- The Geometry Column.

Anonimus
Новоприбывший
Сообщения: 1
Зарегистрирован: 25 сен 2010, 19:27
Репутация: 0

Re: OpenLayers: как перейти к нужному экстенту выбрав значение

Сообщение Anonimus » 25 сен 2010, 19:29

Здравствуйте.
Хорошо.
А как плавно перейти(перелететь) к нужной точки?

Спасибо.

map.panTo() не подходит, т.к. он работает плавно только в текущем экстенде

Ответить

Вернуться в «Веб-картография»

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

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