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

Геоинформационные системы (ГИС) и Дистанционное зондирование Земли
https://gis-lab.info/forum/
Код: Выделить всё
function select_func(A) {
var B = A;
var bounds = new OpenLayers.Bounds.fromString(B);
map.zoomToExtent(bounds);
}
Код: Выделить всё
<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>
Код: Выделить всё
parent.frames.main.map.zoomToExtent(bounds)
Код: Выделить всё
main
Ага, то что нужно, только вопрос, как можно сгенерить такой список регионов автоматически? Интересует откуда берутся границы экстента, не руками же они туда заносились?Максим Дубинин писал(а):например вот так (выберите регион)
http://gis-lab.info/projects/osm-errors.html
Код: Выделить всё
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);
}
Параметры охватов были вычислены с помощью PostGIS следующей командой:Artem писал(а):Ага, то что нужно, только вопрос, как можно сгенерить такой список регионов автоматически? Интересует откуда берутся границы экстента, не руками же они туда заносились?Максим Дубинин писал(а):например вот так (выберите регион)
http://gis-lab.info/projects/osm-errors.html
Код: Выделить всё
SELECT ST_Extent(the_geom),reg from all_bounds GROUP by reg