2013-03-25 5 views
0

SpatiaLite와 OpenLayers간에 가장 효율적인 전송 형식이 무엇인지 궁금했습니다. 현재 SpatiaLite (SQLite의 확장) 및 OpenLayers를 기반으로하는 응용 프로그램을 개발하고 있으며 전송 형식으로 GeoJSON을 사용하고 있습니다.지오 데이터베이스와 OpenLayers 간의 전송 형식

내 절차 : 1) JS 변수 PHP 변수로부터 검색된 데이터를 전송하는 PHP의 출력()을 사용하여, 이와 같이 획득 geojson 포맷 데이터

2

)를 SpatiaLite의 함수 AsGeoJSON를 사용 PHP 스크립트에 의해 quering DB :

var vectorLayer = new OpenLayers.Layer.Vector(name, {style: style, rendererOptions: 
{zIndexing: true}}); 
var formatGeoJSON = new OpenLayers.Format.GeoJSON({}); 
vectorLayer.addFeatures(formatGeoJSON.read(CadastreBorder)); 
map.addLayer(vectorLayer); 

를 읽어 OpenLayers 벡터 레이어의 기능을 만드는

$result = $db->query($query); 

$r = '{"type": "FeatureCollection","features": ['; 
while($row = $result->fetchArray(SQLITE3_ASSOC)) 
{ 
    $r .= '{"type":"Feature","properties":{}, "geometry":' . $row['geometry'] . '},'; 
} 
$r .= ']}'; 
print'<script> CadastreBorder = ' . $r . '; </script>'; 

3) 방법 ACH하는 방법이 있나요 똑같은 목표를보다 효율적으로,보다 멋지게? 감사합니다.

답변

0

PHP의 최신 버전 (5.2> =)을 사용하는 경우 PHP 배열에 json_encode을 사용하는 것이 좋습니다. ,

$geoJSON_array = Array(
    "type" => "FeatureCollection", 
    "features" => Array() 
    ); 

을 그리고 기하학의 각 행에 "기능"을 새로운 테이블을 추가 : 대신 문자열을 만드는이 같은 곳을 찾고 배열을 만들 것

Array(
    "type" => "Feature", 
    "properties" => Array(), 
    "geometry" => Array(... your geometry), 
) 

를 같은 배열을 생성 한 후, 실행 그것 위에 json_encode 그리고 집에있어. 안전을 위해 유효성을 검사합니다 (예 : http://geojsonlint.com/ 사용). 나중에 예를 들어 도움이 될 수 있습니다. 새로운 정보를 지원하거나 새로운 종류의 요소를지도에 추가해야 할 필요가 있습니다.

질문 :로드 포인트에 고정 전략을 사용하지 않는 이유는 무엇입니까? 이 geoJSON을 파일// 스크립트로 만들면 openlayers에게 자동으로 다운로드하도록 알릴 수도 있습니다 (예 :

)
var vectorLayer = new OpenLayers.Layer.Vector(name, { 
    strategies: [new OpenLayers.Strategy.Fixed()], 
    protocol: new OpenLayers.Protocol.HTTP({ 
     url: "json/my_geojson.json", 
     format: new OpenLayers.Format.GeoJSON() 
    }), 
    style: style, 
    rendererOptions: {zIndexing: true} 
}); 
+0

감사합니다. 이것은 다소 최적화 된 것입니다. 그러나 GeoDB와 API간에 데이터를 전송하는 또 다른 방식이 있는지 일반적으로 알 수 있습니다. Anuway 이것도 유용합니다. 답장을 보내 주셔서 감사합니다! –