Какой сервис вы запрашиваете? Если служба ограничивает вас, принимая один полигон, то объединение на стороне клиента, как вы говорите, является, вероятно, единственным вариантом, который у вас есть. В противном случае, если вы делаете запросы к своему собственному серверу, то почему бы не сделать это на стороне сервера? Если это только два полигона, то вы также можете выполнить запрос дважды и агрегировать результаты.

библиотеку в javascript, которая позволила бы мне делать геопространственные запросы. Я знаю об OpenLayers и GoogleMaps, но эти два не поддерживают такие вещи, как пересечение объединений и так далее.

+----+
|    |
|  +-+--+
+--+-+  |
   |    |
   +----+

в

    +----+
    |    |
    |    +--+
    +--+    |
       |    |
       +----+
 limc01 февр. 2011 г., 02:45
+1 за хорошие рисунки. :)
 wolktm16 февр. 2011 г., 09:26
Союз должен быть на стороне клиента "в" JavaScript

Ответы на вопрос(8)

который включает в себя ваш полигон, а затем отфильтровать результаты, используя методику, описанную здесь:http://msdn.microsoft.com/en-us/library/cc451895.aspx, В примере используются карты Bing, но вы можете легко использовать те же принципы, используя любой картографический сервис, который вы предпочитаете.

 wolktm23 янв. 2011 г., 13:23
Пересечения адресованы также в наличии OpenLayers, но Союз не рассматривается в статье.
Решение Вопроса

дернвыглядит действительно многообещающе

JSTS может делать объединения геометрических объектов в браузере. JSTS интегрируется с библиотекой openlayers и расширяет геометрические классы openlayers (например, OpenLayers.Geometry.Polygon), чтобы они могли выполнять геометрические операции. Пример:

>> var poly1 = OpenLayers.Geometry.Polygon.createRegularPolygon(
                                   new OpenLayers.Geometry.Point(0.0,0.0), 2, 5);
>> var poly2 = OpenLayers.Geometry.Polygon.createRegularPolygon(
                                   new OpenLayers.Geometry.Point(1.0,1.0), 2, 4);
>> var poly_u = poly1.union(poly2);
>> var poly_d = poly1.difference(poly2);
>> print(poly_u);
POLYGON((1.5667154718422638 -0.4142135623730949,1.1755705045849463 -1.618033988749895,
  -1.1755705045849465 -1.6180339887498947,-1.902113032590307 0.618033988749895,
  -0.41421356237309503 1.6990562312593451,-0.4142135623730949 2.414213562373095,
   2.414213562373095 2.414213562373095,2.414213562373095 -0.4142135623730949,
   1.5667154718422638 -0.4142135623730949))

Geoscript JS хорошо, если вы хотите выполнять геометрические операции на сервере в JS.

 wolktm16 сент. 2011 г., 09:10
Geoscript был уже предложен здесь, но я думаю, что это только на стороне сервера. JSTS выглядит как решение, которое я искал!
 ivy16 сент. 2011 г., 10:57
Ах, я думал, что geoscript-js -> это javascript -> должен быть библиотекой браузера. Но я не могу найти, как запустить его в браузере, поэтому вы должны быть правы. это просто :)

https://github.com/netshade/spatial_query сделать только это.

Кроме того, вы можете проверитьhttp://geoscript.org/index.html , который, вероятно, лучше поддерживается, чем Spatial Query. Если вы решите проверить SQ, я буду польщен, узнав, работает ли он для вас.

 Chris Zelenak16 февр. 2011 г., 15:36
Если вы можете опубликовать пример исходных данных, которые облажались (здесь или в GH для Spatial Query), я посмотрю, что я могу сделать, чтобы исправить реализацию.
 wolktm16 февр. 2011 г., 09:35
На самом деле, я использую пространственные запросы прямо сейчас, но мне это нравится, но в нем есть некоторые ошибки :( Говоря о геоскрипте, он выглядит как некий серверный код, может ли он работать в браузере?
 Chris Zelenak16 февр. 2011 г., 15:40
AFA Geoscript, вы правы, мои извинения - я не стал вдаваться в требования к пакету. Может быть в состоянии быть портированным, но я не могу быть уверен в этом - извините за неточность.

о, используя нативные функции OpenLayers. Попробуйте это, может быть, вы должны исправить и настроить этот код.

// The first object is instanced using data given from gmaps
var objBound1 = new OpenLayers.Bounds();
objBound1.extend(new OpenLayers.LonLat(2,2));
objBound1.extend(new OpenLayers.LonLat(8,8));

// The second object is instanced using data given from gmaps
var objBound2 = new OpenLayers.Bounds();
objBound2.extend(new OpenLayers.LonLat(5,5));
objBound2.extend(new OpenLayers.LonLat(10,10));

// Extract limits from our objects
var arrBound1 = objBound1.toArray();
var arrBound2 = objBound2.toArray();

// Determine an virtual bound. It must contain our two bounds
var intMinLeft = arrBound1.left < arrBound2.left ? arrBound1.left : arrBound2.left;
var intMinTop = arrBound1.top < arrBound2.top ? arrBound1.top : arrBound2.top;
var intMaxRight = arrBound1.right > arrBound2.right ? arrBound1.right : arrBound2.right;
var intMaxBottom = arrBound1.bottom > arrBound2.bottom ? arrBound1.bottom : arrBound2.bottom;

// Search all points of virtual bound, storing the points contained in bound1 or bound2
var objBoundResult = new OpenLayers.Bounds();
for(var intI = intMinLeft; intI < intMaxRight; intI++) {
    for(var intJ = intMinTop; intJ < intMaxBottom; intJ++) {
        if(objBound1.containsLonLat(new OpenLayers.LonLat(intI, intJ)) || objBound2.containsLonLat(new OpenLayers.LonLat(intI, intJ))) {
            objBoundResult.add(intI, intJ);
        }
    }
}

// objBoundResult is what you want
 wolktm16 февр. 2011 г., 09:33
Я все еще должен попробовать это, извините за задержку

но сложная операция, и ее лучше выполнять на стороне сервера.

Еще один API, который может быть полезен, - это ArcGIS Javascript API, хотя из того, что я вижу, я не думаю, что он будет объединяться без ArcGIS Server:http://help.arcgis.com/en/webapi/javascript/arcgis/

 wolktm16 февр. 2011 г., 09:20
ArcGIS - Серверная сторона и платная - нет, спасибо;) Servside работает медленно (), и мне нужно объединить всего 2 полигона, чтобы производительность javascript не была проблемой (по крайней мере, в webkit)
 Gnat16 февр. 2011 г., 14:52
Какой сервис вы запрашиваете? Если служба ограничивает вас, принимая один полигон, то объединение на стороне клиента, как вы говорите, является, вероятно, единственным вариантом, который у вас есть. В противном случае, если вы делаете запросы к своему собственному серверу, то почему бы не сделать это на стороне сервера? Если это только два полигона, то вы также можете выполнить запрос дважды и агрегировать результаты.

geoUtils?

Я не уверен, поддерживает ли он профсоюз, но стоит попробовать.

 wolktm23 янв. 2011 г., 13:15
Я не вижу там союза.

которая поддерживает JDBC. Проверьте здесь для примера:http://postgis.refractions.net/docs/ch05.html#id2644717

:)

ЦСП

 wolktm19 февр. 2011 г., 11:21
На стороне сервера это не проблема, я ищу клиентскую библиотеку JavaScript.

вы можете запустить ESRI ArcGIS Server 10 и запустить сервис Geometry. Эта функция доступна через интерфейс API (включая REST). Посмотрите на их справочную документацию:SOAP SDK

 wolktm16 февр. 2011 г., 09:32
Должен быть на стороне клиента Javascript

Ваш ответ на вопрос