Страница 1 из 1

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

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

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

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

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

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

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

Добавлено: 23 янв 2010, 19:13
Denis Rykov
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>

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

Добавлено: 24 янв 2010, 19:06
dobeer
Спасибо _DR_ , заработало

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

Добавлено: 16 фев 2010, 11:49
dobeer
Подскажите пожалуйста, как вышепроделанное сделать если список или кнопка находятся на одной странице, а карта на другой?

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

Добавлено: 16 фев 2010, 14:07
wmk
Всмысле во Frame? , или в другом окне?

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

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

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

Добавлено: 17 фев 2010, 06:08
dobeer
ну пожалуста, хоть ктонить подскажите, а то проект встал :D

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

Добавлено: 19 фев 2010, 07:33
dobeer
Проблему решил сам, так:

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

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

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

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

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

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

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

Добавлено: 02 сен 2010, 11:00
Artem
если там структура как у 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". Карта сразу же грузиться в нужном экстенте.

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

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

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

SELECT ST_Extent(the_geom),reg from all_bounds GROUP by reg
где reg - имя поля, содержащего название региона. Пример результата.

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

Добавлено: 25 сен 2010, 19:29
Anonimus
Здравствуйте.
Хорошо.
А как плавно перейти(перелететь) к нужной точки?

Спасибо.

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