2016-03-25 6 views
1

Я смог импортировать некоторые шейп-файлы в Neo4j 2.3.1. Теперь, как просмотреть эти данные на карте?Визуализация базы данных Neo4j-Spatial на карте

Я пробовал инструкции Wiki на GeoServer и uDig, но оба они устарели, и я не мог заставить его работать.

Есть ли какой-нибудь недавний учебник или другой инструмент, который может решить эту проблему?

ответ

0

Я использовал neo4j-пространственный с Mapbox.js для визуализации геометрии на карте.

Для моего случая использования я индексироваться Конгресса США окружные геометрий в Neo4j-пространственном затем запросить пространственный индекс, основанный на том, где пользователь щелкает на карте, возвращая ближайший район, включая строку WKT и результаты запрос Cypher. Чтобы отобразить многоугольник WKT на карте, я написал простую функцию javascript для синтаксического анализа этого массива точек для добавления аннотации к карте.

Вот некоторые важные фрагменты кода:

Создать карту и определить обработчик щелчка на карте:

L.mapbox.accessToken = MB_API_TOKEN; 
var map = L.mapbox.map('map', 'mapbox.streets') 
    .setView([39.8282, -98.5795], 5); 

map.on('click', function(e) { 
    clearMap(map); 
    getClosestDistrict(e); 
}); 

Ручка мыши

/** 
    * Find the District for a given latlng. 
    * Find the representative, commitees and subjects for that rep. 
    */ 
function infoDistrictWithinDistance(latlng, distance) { 

    var districtParams = { 
    "layer": "geom", 
    "pointX": latlng.lng, 
    "pointY": latlng.lat, 
    "distanceInKm": distance 
    }; 

var districtURL = baseURI + findGeometriesPath; 
makePOSTRequest(districtURL, districtParams, function (error, data) { 

    if (error) { 
    console.log("Error"); 
    } else { 
    console.log(data); 

    var params = { 
    "state": data[0]["data"]["state"], 
    "district": data[0]["data"]["district"] 
    }; 

    var points = parseWKTPolygon(data[0]["data"]["wkt"]); 

    makeCypherRequest([{"statement": subjectsQuery, "parameters": params}], function (error, data) { 

    if (error) { 
     console.log("Error"); 
    } else { 
     console.log(data); 

     var districtInfo = data["results"][0]["data"][0]["row"][0]; 
     districtInfo["points"] = points; 
     districtInfo["state"] = params["state"]; 
     districtInfo["district"] = params["district"]; 
     console.log(districtInfo); 

     addDistrictToMap(districtInfo, latlng); 
    } 
    }); 
} 
}); 

Анализировать WKT в массив точек

/** 
* Converts Polygon WKT string to an array of [x,y] points 
*/ 
function parseWKTPolygon(wkt) { 
    var pointArr = []; 
    var points = wkt.slice(10, -3).split(","); 

    $.each(points, function(i,v) { 
    var point = $.trim(v).split(" "); 
    var xy = [Number(point[1]), Number(point[0])]; 
    pointArr.push(xy) 
    }); 

    return pointArr; 
} 

Код в this repo. Вы можете увидеть простую демонстрацию карты here (просто нажмите в любом месте в США, чтобы начать). Существует также недавняя запись в блоге об этом примере here.

+0

Спасибо! Это то, что я искал. Я вижу, что вы добавляете данные в Neo4j аналогичным образом. Ваш импорт/добавление узлов в скрипт слоя работает очень медленно или это только я? –