Create POI API and importer script
commit
6b5a24152e
@ -0,0 +1,4 @@
|
||||
/settings.php
|
||||
/database.mwb.bak
|
||||
/vendor/
|
||||
/nbproject/private
|
@ -0,0 +1,16 @@
|
||||
{
|
||||
"name": "netsyms/points-of-interest-api",
|
||||
"description": "Simple PHP API for getting OpenStreetMap points of interest as GeoJSON",
|
||||
"type": "project",
|
||||
"require": {
|
||||
"catfan/medoo": "^1.6",
|
||||
"anthonymartin/geo-location": "^1.0"
|
||||
},
|
||||
"license": "MIT",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Skylar Ittner",
|
||||
"email": "admin@netsyms.com"
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,122 @@
|
||||
{
|
||||
"_readme": [
|
||||
"This file locks the dependencies of your project to a known state",
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "7717ebd7c56c3d078f88c2c9aab56f61",
|
||||
"packages": [
|
||||
{
|
||||
"name": "anthonymartin/geo-location",
|
||||
"version": "v1.0.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/anthonymartin/GeoLocation.php.git",
|
||||
"reference": "50bf026f069296dfae11aa195d987854b2e75855"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/anthonymartin/GeoLocation.php/zipball/50bf026f069296dfae11aa195d987854b2e75855",
|
||||
"reference": "50bf026f069296dfae11aa195d987854b2e75855",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.0"
|
||||
},
|
||||
"type": "class",
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"AnthonyMartin": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"CC 3.0"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Anthony Martin",
|
||||
"email": "anthony@replaycreative.com",
|
||||
"homepage": "http://replaycreative.com",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "Retrieve bounding coordinates, distances, longitude and latitude with GeoLocation.class.php",
|
||||
"homepage": "https://github.com/anthonymartin/GeoLocation.php",
|
||||
"keywords": [
|
||||
"bounding coordinates",
|
||||
"distances",
|
||||
"geocoding",
|
||||
"geolocation"
|
||||
],
|
||||
"time": "2016-09-17T18:05:14+00:00"
|
||||
},
|
||||
{
|
||||
"name": "catfan/medoo",
|
||||
"version": "v1.6.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/catfan/Medoo.git",
|
||||
"reference": "53a02b300d673f716cb06bf0e24fd774ec53939f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/catfan/Medoo/zipball/53a02b300d673f716cb06bf0e24fd774ec53939f",
|
||||
"reference": "53a02b300d673f716cb06bf0e24fd774ec53939f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-pdo": "*",
|
||||
"php": ">=5.4"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-pdo_dblib": "For MSSQL or Sybase database on Linux/UNIX platform",
|
||||
"ext-pdo_mysql": "For MySQL or MariaDB database",
|
||||
"ext-pdo_oci": "For Oracle database",
|
||||
"ext-pdo_oci8": "For Oracle version 8 database",
|
||||
"ext-pdo_pqsql": "For PostgreSQL database",
|
||||
"ext-pdo_sqlite": "For SQLite database",
|
||||
"ext-pdo_sqlsrv": "For MSSQL database"
|
||||
},
|
||||
"type": "framework",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Medoo\\": "/src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Angel Lai",
|
||||
"email": "angel@catfan.me"
|
||||
}
|
||||
],
|
||||
"description": "The lightest PHP database framework to accelerate development",
|
||||
"homepage": "https://medoo.in",
|
||||
"keywords": [
|
||||
"database",
|
||||
"lightweight",
|
||||
"mariadb",
|
||||
"mssql",
|
||||
"mysql",
|
||||
"oracle",
|
||||
"php framework",
|
||||
"postgresql",
|
||||
"sql",
|
||||
"sqlite"
|
||||
],
|
||||
"time": "2018-12-08T20:24:23+00:00"
|
||||
}
|
||||
],
|
||||
"packages-dev": [],
|
||||
"aliases": [],
|
||||
"minimum-stability": "stable",
|
||||
"stability-flags": [],
|
||||
"prefer-stable": false,
|
||||
"prefer-lowest": false,
|
||||
"platform": [],
|
||||
"platform-dev": []
|
||||
}
|
Binary file not shown.
@ -0,0 +1,90 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Import a CSV file generated by osmpois.jar
|
||||
* https://github.com/MorbZ/OsmPoisPbf
|
||||
*
|
||||
* Expected CSV format:
|
||||
65|N357939737|48.5841285|-114.9976581|Swamp Mountain
|
||||
65|N357939740|47.7252186|-113.6412010|Swan Glaciers
|
||||
65|N357939743|47.7193851|-113.6414787|Swan Peak
|
||||
37|N357939746|47.7688309|-113.8928792|Swan River State Forest
|
||||
21|N357939752|47.4904920|-113.6795331|Swan Valley School
|
||||
65|N357939758|48.4088516|-114.7782011|Mount Swaney
|
||||
65|N357939762|48.3680110|-115.4601645|Swede Mountain
|
||||
65|N357939764|46.6479788|-114.2214988|Sweeney Peak
|
||||
65|N357939778|45.1641103|-109.6046133|Sylvan Peak
|
||||
*/
|
||||
|
||||
require __DIR__ . '/settings.php';
|
||||
|
||||
if (!$SETTINGS['debug']) {
|
||||
error_reporting(0);
|
||||
} else {
|
||||
error_reporting(E_ALL);
|
||||
ini_set('display_errors', 'On');
|
||||
}
|
||||
|
||||
//
|
||||
// Composer
|
||||
require __DIR__ . '/vendor/autoload.php';
|
||||
|
||||
date_default_timezone_set($SETTINGS['timezone']);
|
||||
|
||||
use Medoo\Medoo;
|
||||
|
||||
$database;
|
||||
try {
|
||||
$database = new Medoo([
|
||||
'database_type' => $SETTINGS['database']['type'],
|
||||
'database_name' => $SETTINGS['database']['name'],
|
||||
'server' => $SETTINGS['database']['server'],
|
||||
'username' => $SETTINGS['database']['user'],
|
||||
'password' => $SETTINGS['database']['password'],
|
||||
'charset' => $SETTINGS['database']['charset']
|
||||
]);
|
||||
} catch (Exception $ex) {
|
||||
die("Database error: $ex\n");
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (!file_exists($argv[1])) {
|
||||
die("Please supply the filename of the CSV file to import.\n");
|
||||
}
|
||||
|
||||
$current = 0;
|
||||
|
||||
$handle = fopen($argv[1], "r");
|
||||
if ($handle) {
|
||||
$batchinsert = [];
|
||||
while (($line = fgets($handle)) !== false) {
|
||||
$fields = explode("|", trim($line), 5);
|
||||
|
||||
$batchinsert[] = [
|
||||
"osmid" => substr($fields[1], 1),
|
||||
"typeid" => $fields[0],
|
||||
"latitude" => $fields[2],
|
||||
"longitude" => $fields[3],
|
||||
"eletype" => $fields[1][0],
|
||||
"name" => $fields[4]
|
||||
];
|
||||
|
||||
$current++;
|
||||
if ($current % 100 == 0) {
|
||||
$database->insert("poi", $batchinsert);
|
||||
$error = $database->error();
|
||||
if ($error[1] != 0 && $error[0] != "23000") {
|
||||
die("\nDatabase error $error[0]: $error[2]\n");
|
||||
}
|
||||
$batchinsert = [];
|
||||
echo " $current ";
|
||||
}
|
||||
}
|
||||
|
||||
fclose($handle);
|
||||
|
||||
echo "\nDone: $current records processed.\n";
|
||||
} else {
|
||||
die("Error: could not open the file.\n");
|
||||
}
|
@ -0,0 +1,138 @@
|
||||
<?php
|
||||
|
||||
require_once __DIR__ . "/required.php";
|
||||
|
||||
function getgeojson($data) {
|
||||
global $SETTINGS;
|
||||
$geojson = [
|
||||
"status" => "OK"
|
||||
];
|
||||
// If the data is an array, make a FeatureCollection
|
||||
// If there's no results, make an empty FeatureCollection
|
||||
if (count($data) == 0 || is_array($data[0])) {
|
||||
$geojson["type"] = "FeatureCollection";
|
||||
$geojson["results"] = count($data);
|
||||
$geojson["max_results"] = $SETTINGS["max_results"];
|
||||
$geojson["features"] = [];
|
||||
|
||||
foreach ($data as $item) {
|
||||
$geojson["features"][] = [
|
||||
"type" => "Feature",
|
||||
"geometry" => [
|
||||
"type" => "Point",
|
||||
"coordinates" => [
|
||||
$item["longitude"] * 1.0,
|
||||
$item["latitude"] * 1.0
|
||||
]
|
||||
],
|
||||
"properties" => [
|
||||
"osmid" => $item["osmid"] * 1,
|
||||
"name" => $item["name"],
|
||||
"typeid" => $item["typeid"] * 1,
|
||||
"type" => $item["type"],
|
||||
"eletype" => $item["eletype"]
|
||||
]
|
||||
];
|
||||
}
|
||||
} else {
|
||||
$geojson["type"] = "Feature";
|
||||
$geojson["geometry"] = [
|
||||
"type" => "Point",
|
||||
"coordinates" => [
|
||||
$data["longitude"] * 1.0,
|
||||
$data["latitude"] * 1.0
|
||||
]
|
||||
];
|
||||
$geojson["properties"] = [
|
||||
"osmid" => $data["osmid"] * 1,
|
||||
"name" => $data["name"],
|
||||
"typeid" => $data["typeid"] * 1,
|
||||
"type" => $data["type"],
|
||||
"eletype" => $data["eletype"]
|
||||
];
|
||||
}
|
||||
|
||||
return $geojson;
|
||||
}
|
||||
|
||||
$where = [];
|
||||
|
||||
$validations = [
|
||||
"osmid" => "/[0-9]+/",
|
||||
"typeid" => "/[1-9]+/",
|
||||
"type" => "/[A-Z]+_[A-Z]+",
|
||||
"latitude" => "/[0-9]{0,3}\.[0-9]{2,10}/",
|
||||
"longitude" => "/[0-9]{0,3}\.[0-9]{2,10}/",
|
||||
"radius_km" => "/[0-9]+/",
|
||||
"radius_mi" => "/[0-9]+/"
|
||||
];
|
||||
|
||||
foreach ($validations as $name => $regex) {
|
||||
if (!empty($_GET[$name])) {
|
||||
if (is_array($_GET[$name])) {
|
||||
foreach ($_GET[$name] as $t) {
|
||||
if (!preg_match($regex, $t)) {
|
||||
exit("[]");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (!preg_match($regex, $_GET[$name])) {
|
||||
exit("[]");
|
||||
}
|
||||
}
|
||||
if (preg_match("/(osmid|typeid|type)/", $name)) {
|
||||
$where[$name] = $_GET[$name];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Calculate bounding box
|
||||
use AnthonyMartin\GeoLocation\GeoLocation as GeoLocation;
|
||||
|
||||
if (!empty($_GET["latitude"]) && !empty($_GET["longitude"])) {
|
||||
|
||||
$userlocation = GeoLocation::fromDegrees($_GET["latitude"], $_GET["longitude"]);
|
||||
|
||||
$radius = $SETTINGS["default_radius"];
|
||||
if (!empty($_GET["radius_km"])) {
|
||||
$radius = $_GET["radius_km"] * 1.0;
|
||||
} else if (!empty($_GET["radius_mi"])) {
|
||||
$radius = $_GET["radius_mi"] / 0.62137;
|
||||
}
|
||||
$searchbounds = $userlocation->boundingCoordinates($radius, "kilometers");
|
||||
|
||||
$where["latitude[<>]"] = [$searchbounds[0]->getLatitudeInDegrees(), $searchbounds[1]->getLatitudeInDegrees()];
|
||||
$where["longitude[<>]"] = [$searchbounds[0]->getLongitudeInDegrees(), $searchbounds[1]->getLongitudeInDegrees()];
|
||||
}
|
||||
|
||||
// Remove database ambiguity
|
||||
foreach ($where as $key => $value) {
|
||||
if ($key == "typeid") {
|
||||
$where["poi.typeid"] = $value;
|
||||
unset($where["typeid"]);
|
||||
}
|
||||
}
|
||||
|
||||
if (count($where) > 1) {
|
||||
$where = ["AND" => $where];
|
||||
}
|
||||
|
||||
$where["LIMIT"] = $SETTINGS["max_results"];
|
||||
|
||||
|
||||
ob_flush();
|
||||
$database->debug()->select("poi", ["[>]types" => "typeid"], ["osmid", "poi.typeid", "type", "latitude", "longitude", "eletype", "name"], $where);
|
||||
$query = ob_get_contents();
|
||||
ob_clean();
|
||||
$results = $database->query($query)->fetchAll();
|
||||
|
||||
$geojson = getgeojson($results);
|
||||
|
||||
if ($SETTINGS["debug"]) {
|
||||
$geojson["query"] = $query;
|
||||
}
|
||||
|
||||
if (empty($_GET["pretty"])) {
|
||||
exit(json_encode($geojson));
|
||||
}
|
||||
exit(json_encode($geojson, JSON_PRETTY_PRINT));
|
@ -0,0 +1,7 @@
|
||||
include.path=${php.global.include.path}
|
||||
php.version=PHP_72
|
||||
source.encoding=UTF-8
|
||||
src.dir=.
|
||||
tags.asp=false
|
||||
tags.short=false
|
||||
web.root=.
|
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://www.netbeans.org/ns/project/1">
|
||||
<type>org.netbeans.modules.php.project</type>
|
||||
<configuration>
|
||||
<data xmlns="http://www.netbeans.org/ns/php-project/1">
|
||||
<name>PointsOfInterestAPI</name>
|
||||
</data>
|
||||
</configuration>
|
||||
</project>
|
@ -0,0 +1,167 @@
|
||||
1,ACCOMMO_ALPINEHUT
|
||||
2,ACCOMMO_CAMPING
|
||||
3,ACCOMMO_CARAVAN
|
||||
4,ACCOMMO_CHALET
|
||||
5,ACCOMMO_HOSTEL
|
||||
6,ACCOMMO_HOTEL
|
||||
7,ACCOMMO_MOTEL
|
||||
8,AMENITY_COURT
|
||||
9,AMENITY_FIRESTATION
|
||||
11,AMENITY_LIBRARY
|
||||
12,AMENITY_PLAYGROUND
|
||||
13,AMENITY_POLICE
|
||||
14,AMENITY_POSTOFFICE
|
||||
15,AMENITY_PRISON
|
||||
16,AMENITY_PUBLICBUILDING
|
||||
17,AMENITY_TOWNHALL
|
||||
18,BARRIER_BLOCKS
|
||||
19,EDUCATION_COLLEGE
|
||||
20,EDUCATION_NURSERY
|
||||
21,EDUCATION_SCHOOL
|
||||
22,EDUCATION_UNIVERSITY
|
||||
23,FOOD_BAR
|
||||
24,FOOD_BIERGARTEN
|
||||
25,FOOD_CAFE
|
||||
26,FOOD_FASTFOOD
|
||||
27,FOOD_ICECREAM
|
||||
28,FOOD_PUB
|
||||
29,FOOD_RESTAURANT
|
||||
30,HEALTH_DENTIST
|
||||
31,HEALTH_DOCTORS
|
||||
32,HEALTH_HOSPITALEMERGENCY
|
||||
33,HEALTH_HOSPITAL
|
||||
34,HEALTH_PHARMACY
|
||||
35,HEALTH_VETERINARY
|
||||
36,LANDUSE_ALLOTMENTS
|
||||
37,LANDUSE_CONIFEROUSDECIDUOUS
|
||||
38,LANDUSE_CONIFEROUS
|
||||
39,LANDUSE_DECIDUOUS
|
||||
40,LANDUSE_GRASS
|
||||
41,LANDUSE_HILLS
|
||||
42,LANDUSE_MILITARY
|
||||
43,LANDUSE_QUARY
|
||||
44,LANDUSE_SCRUB
|
||||
45,LANDUSE_SWAMP
|
||||
46,MONEY_BANK
|
||||
47,MONEY_EXCHANGE
|
||||
48,POW_BAHAI
|
||||
49,POW_BUDDHIST
|
||||
50,POW_CHRISTIAN
|
||||
51,POW_HINDU
|
||||
52,POW_ISLAMIC
|
||||
53,POW_JAIN
|
||||
54,POW_JEWISH
|
||||
55,POW_SHINTO
|
||||
56,POW_SIKH
|
||||
58,POW_UNKOWN
|
||||
59,POI_CAVE
|
||||
60,POI_CRANE
|
||||
61,POI_EMBASSY
|
||||
62,POI_BUNKER
|
||||
63,POI_MINE
|
||||
64,POI_PEAK1
|
||||
65,POI_PEAK
|
||||
66,POI_CITY
|
||||
67,POI_HAMLET
|
||||
68,POI_SUBURB
|
||||
69,POI_TOWN
|
||||
70,POI_VILLAGE
|
||||
71,POI_TOWERCOMMUNICATION
|
||||
72,POI_TOWERLOOKOUT
|
||||
73,SHOP_ALCOHOL
|
||||
74,SHOP_BAKERY
|
||||
75,SHOP_BICYCLE
|
||||
76,SHOP_BOOK
|
||||
77,SHOP_BUTCHER
|
||||
78,SHOP_CARREPAIR
|
||||
79,SHOP_CAR
|
||||
80,SHOP_CLOTHES
|
||||
81,SHOP_COMPUTER
|
||||
82,SHOP_CONFECTIONERY
|
||||
83,SHOP_CONVENIENCE
|
||||
84,SHOP_COPYSHOP
|
||||
85,SHOP_DEPARTMENTSTORE
|
||||
86,SHOP_DIY
|
||||
87,SHOP_FISH
|
||||
88,SHOP_FLORIST
|
||||
89,SHOP_GARDENCENTRE
|
||||
90,SHOP_GIFT
|
||||
91,SHOP_GREENGROCER
|
||||
92,SHOP_HAIRDRESSER
|
||||
93,SHOP_HEARINGAIDS
|
||||
94,SHOP_HIFI
|
||||
95,SHOP_JEWELRY
|
||||
96,SHOP_KIOSK
|
||||
97,SHOP_LAUNDRETTE
|
||||
98,SHOP_MARKETPLACE
|
||||
99,SHOP_PHONE
|
||||
100,SHOP_MOTORCYCLE
|
||||
101,SHOP_MUSIC
|
||||
102,SHOP_NEWSPAPER
|
||||
103,SHOP_PET
|
||||
104,SHOP_SHOES
|
||||
105,SHOP_SUPERMARKET
|
||||
106,SHOP_TOBACCO
|
||||
107,SHOP_TOYS
|
||||
108,SHOP_VENDINGMASCHINE
|
||||
109,SHOP_VIDEORENTAL
|
||||
110,SPORT_ARCHERY
|
||||
111,SPORT_BASEBALL
|
||||
112,SPORT_BASKETBALL
|
||||
113,SPORT_BOWLING
|
||||
114,SPORT_CANOE
|
||||
115,SPORT_CRICKET
|
||||
116,SPORT_DIVING
|
||||
117,SPORT_FOOTBALL
|
||||
118,SPORT_GOLF
|
||||
119,SPORT_GYM
|
||||
120,SPORT_GYMNASIUM
|
||||
121,SPORT_CLIMBING
|
||||
122,SPORT_HORSE
|
||||
123,SPORT_ICESKATING
|
||||
124,SPORT_LEISURECENTER
|
||||
125,SPORT_MINIATURGOLF
|
||||
126,SPORT_MOTORRACING
|
||||
127,SPORT_SHOOTING
|
||||
128,SPORT_SKATING
|
||||
129,SPORT_SKIINGDOWNHILL
|
||||
130,SPORT_SNOOKER
|
||||
131,SPORT_SOCCER
|
||||
132,SPORT_STADIUM
|
||||
133,SPORT_SWIMMING
|
||||
134,SPORT_TENNIS
|
||||
135,SPORT_WATERSKI
|
||||
136,SPORT_SURFING
|
||||
137,TOURIST_ARCHAELOGICAL
|
||||
138,TOURIST_ART
|
||||
139,TOURIST_ATTRACTION
|
||||
140,TOURIST_BATTLEFIELD
|
||||
141,TOURIST_BEACH
|
||||
142,TOURIST_CASTLE
|
||||
143,TOURIST_CASTLE2
|
||||
144,TOURIST_CINEMA
|
||||
145,TOURIST_FOUNTAIN
|
||||
146,TOURIST_INFORMATION
|
||||
147,TOURIST_MEMORIAL
|
||||
148,TOURIST_MONUMENT
|
||||
149,TOURIST_MUSEUM
|
||||
150,TOURIST_NIGHTCLUB
|
||||
151,TOURIST_RUINS
|
||||
152,TOURIST_THEATRE
|
||||
153,TOURIST_THEMEPARK
|
||||
156,TOURIST_WINDMILL
|
||||
157,TOURIST_WRECK
|
||||
158,TOURIST_ZOO
|
||||
159,TRANSPORT_TERMINAL
|
||||
160,TRANSPORT_AIRPORT
|
||||
161,TRANSPORT_BUSSTOP
|
||||
162,TRANSPORT_FUEL
|
||||
163,TRANSPORT_LIGHTHOUSE
|
||||
164,TRANSPORT_MARINA
|
||||
165,TRANSPORT_RENTALCAR
|
||||
166,TRANSPORT_SUBWAY
|
||||
167,TRANSPORT_STATION
|
||||
168,TRANSPORT_TRAMSTOP
|
||||
169,WATER_DAM
|
||||
170,WATER_TOWER
|
||||
171,WATER_WEIR
|
|
@ -0,0 +1,80 @@
|
||||
<?php
|
||||
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
/**
|
||||
* This file contains global settings and utility functions.
|
||||
*/
|
||||
ob_start(); // allow sending headers after content
|
||||
// Settings file
|
||||
require __DIR__ . '/settings.php';
|
||||
|
||||
// Unicode, solves almost all stupid encoding problems
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
//
|
||||
// Composer
|
||||
require __DIR__ . '/vendor/autoload.php';
|
||||
|
||||
date_default_timezone_set($SETTINGS['timezone']);
|
||||
|
||||
function sendError($msg) {
|
||||
header('HTTP/1.1 500 Internal Server Error');
|
||||
exit(json_encode(["status" => "ERROR", "message" => $msg]));
|
||||
}
|
||||
|
||||
// Database settings
|
||||
// Also inits database and stuff
|
||||
use Medoo\Medoo;
|
||||
|
||||
$database;
|
||||
try {
|
||||
$database = new Medoo([
|
||||
'database_type' => $SETTINGS['database']['type'],
|
||||
'database_name' => $SETTINGS['database']['name'],
|
||||
'server' => $SETTINGS['database']['server'],
|
||||
'username' => $SETTINGS['database']['user'],
|
||||
'password' => $SETTINGS['database']['password'],
|
||||
'charset' => $SETTINGS['database']['charset']
|
||||
]);
|
||||
} catch (Exception $ex) {
|
||||
sendError("Database error. Try again later. $ex");
|
||||
}
|
||||
|
||||
|
||||
if (!$SETTINGS['debug']) {
|
||||
error_reporting(0);
|
||||
} else {
|
||||
error_reporting(E_ALL);
|
||||
ini_set('display_errors', 'On');
|
||||
}
|
||||
|
||||
|
||||
$VARS;
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$VARS = $_POST;
|
||||
define("GET", false);
|
||||
} else {
|
||||
$VARS = $_GET;
|
||||
define("GET", true);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if the previous database action had a problem.
|
||||
* @param array $specials int=>string array with special response messages for SQL errors
|
||||
*/
|
||||
function checkDBError($specials = []) {
|
||||
global $database;
|
||||
$errors = $database->error();
|
||||
if (!is_null($errors[1])) {
|
||||
foreach ($specials as $code => $text) {
|
||||
if ($errors[1] == $code) {
|
||||
sendError($text);
|
||||
}
|
||||
}
|
||||
sendError("A database error occurred: " . $errors[2]);
|
||||
}
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
// Settings for the app.
|
||||
// Copy to settings.php and customize.
|
||||
|
||||
$SETTINGS = [
|
||||
// Whether to output debugging info like PHP notices, warnings,
|
||||
// and stacktraces.
|
||||
// Turning this on in production is a security risk and can sometimes break
|
||||
// things, such as JSON output where extra content is not expected.
|
||||
"debug" => false,
|
||||
// Database connection settings
|
||||
// See http://medoo.in/api/new for info
|
||||
"database" => [
|
||||
"type" => "mysql",
|
||||
"name" => "poidb",
|
||||
"server" => "localhost",
|
||||
"user" => "root",
|
||||
"password" => "",
|
||||
"charset" => "utf8"
|
||||
],
|
||||
// Maximum number of results to return.
|
||||
"max_results" => 1000,
|
||||
// Default radius when searching by location, in kilometers
|
||||
"default_radius" => 10,
|
||||
// Name of the app.
|
||||
"site_title" => "OSM Points of Interest",
|
||||
// For supported values, see http://php.net/manual/en/timezones.php
|
||||
"timezone" => "America/Denver"
|
||||
];
|
Loading…
Reference in New Issue